2

JYun

 3 years ago
source link: https://www.cnblogs.com/JYun/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

2015年8月18日

[译]IOS中AutoLayout布局与Transform的冲突问题

http://m.blog.csdn.net/blog/a345017062/43565279

原文链接见这里:
下来讨论的是在AutoLayout布局下,View的Transform被改变时,会触发layout从而引起布局混乱的问题。这些适配问题在IOS8中可能已经不存在,或者至少被弱化了。
AutoLayout中的transform确实存在一些兼容性问题,从而导致动画异常。至于其原因,我的理解是,一旦使用了AutoLayout,那么它的frame就应该交给AutoLayout来处理,就不应该再通过变换transform来修改它的frame。
AutoLayout的原理是在layoutSubviews中应用Constraints来设置View的frame。换句话说,Constraints只是一个在layoutSubviews时执行的任务队列。
当我修改下面这个View的transform上时,理论上的结果应该是View被居中缩小,但当View有不同的Constraints时,我们可能会看到不同的效果:
v.transform = CGAffineTransformMakeScale(0.5,0.5);
另外需要引起注意的是,修改View的transform时,会立即触发layout。
解决方案:
一、不使用Constraints。
单纯的干掉所有的Contraints,会让View从屏幕上面消失,我们还需要通过把translatesAutoresizingMaskIntoConstraints设置为YES来使View不受AutoLayout影响。如果觉得这个方案比较极端的,看看下面这个方案。
二、特定场景下使用Constraints
如果第一个方案提到的这个View的size是自身决定的(如固定,或者按内容适配),并且根据View的中心点来确定其位置,那么,第一个方案中的transform显示OK。因为这种情况下,autolayout中的constraints不会影响到View的frame。
三、使用Subview
前面两种方案都限制了AutoLayout的优点,现在讲一下不需要限制AutoLayout优点的方案。使用constraint布局出一个Host View来,然后在Host View中增加我们要布局的真实View。下图是个示例:
白色View是Host View,使用任意的constraints给它确定一个位置,并设置为背影透明。把红色View当成它的subview,通过中心对齐确定红色View在其白色Host View中的位置。这样,我们再对红色View做缩放、旋转等变换时,就不会有任何影响了:
self.otherView.transform = CGAffineTransformScale(self.otherView.transform, 0.5, 0.5);
self.otherView.transform = CGAffineTransformRotate(self.otherView.transform, M_PI/8.0);
四、使用Layer Transforms
使用Layer Transform来替代View Transform,就不会触发layout,也不会与constrants冲突。例如,下面这个“心跳”动画在AutoLayout下可能会中断:
[UIView animateWithDuration:0.3 delay:0
                    options:UIViewAnimationOptionAutoreverse
                 animations:^{
    v.transform = CGAffineTransformMakeScale(1.1, 1.1);
} completion:^(BOOL finished) {
    v.transform = CGAffineTransformIdentity;
}];
但如果我们使用Core Animation的话,就不会有问题:
CABasicAnimation* ba = [CABasicAnimation animationWithKeyPath:@"transform"];
ba.autoreverses = YES;
ba.duration = 0.3;
ba.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.1, 1.1, 1)];
[v.layer addAnimation:ba forKey:nil];

posted @ 2015-08-18 21:02 JYun 阅读(937) 评论(1) 推荐(1) 编辑

2012年11月1日

修改在WIN7 64位服务调试32位DLL的方法

摘要:转自http://blog.sina.com.cn/s/blog_6ba6d89e01013uzz.html根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。云平台框架。上次在作业的时候遇到了一件蛋疼的事情。根据要求,需要建立一个WCF Service Library,由于我的机器是x64,考虑到兼容性,将工程编译属性调整为x86。然后我就欢乐的去调试了然后...就没有然后了...调试项目无法运行System. 阅读全文

posted @ 2012-11-01 11:08 JYun 阅读(2916) 评论(1) 推荐(1) 编辑

2011年12月25日

惊闻姑姑家女婿去世,哀叹生命之脆弱,死亡如此接近

摘要:12-25日19点多,收到老婆短信,我忙到晚上9点多才看,才知道我大姑姑的女婿昨日去世了,昨晚正是西方的平安夜,很多年轻人都出去庆祝了,不知道我的那两个侄子,侄女如何挨过,一定很心痛,而我脑中也泛起片片记忆的浪花,想起我小时候他带我去河边游泳,还有去年春节到我小姑姑家里聚会,打牌的情景,昨日情景依旧,今日人已飘渺仙去,叹人生之短暂,生命之脆弱,想想我自己,应该认真过好每一天,每天进步一点点,真到了大限之日,也不枉过此生。 阅读全文

posted @ 2011-12-25 22:34 JYun 阅读(596) 评论(0) 推荐(1) 编辑

2010年11月9日

离职前的感慨

摘要:在这家公司七年了,平平淡淡,结束了,真的感到累了,台资企业,到专员这个位置已经三年了,薪资,职位已无上升可能性,决定离开,30岁了,不知道还能不能闯出点名堂来,祝福自己吧。 阅读全文

posted @ 2010-11-09 23:19 JYun 阅读(306) 评论(0) 推荐(1) 编辑

2008年1月9日

转 一个典型的代码走查检查单

摘要:代码走查的最主要的目的是为了发现程序中的逻辑错误,编程风格方面的错误可以通过风格检查的工具去检查。如下的检查单给代码走查的专家发现逻辑错误提供了一个很好的帮助。  序号检查项  1代码的注释与代码是否一致?注释是否是多余的?  2是否存在超过3层嵌套的循环与/或判断?  3变量的命名是否代表了其作用?  4所有的循环边界是否正确?  5所有的判断条件边界是否正确?  6输入参数的异常是否处理了? ... 阅读全文

posted @ 2008-01-09 13:37 JYun 阅读(695) 评论(1) 推荐(0) 编辑

2007年8月2日

原创及工作经验 SQL 2000包执行错误

摘要:因为要将客户机的ACCESS数据库中的刷卡记录导入SQL中,ACCESS的数据库采用的是目录共享方式共享的,但是包执行几次都错误,了解到是SQLAGENT的帐户问题,因此解决方法如下:客户机加入域的情况:在SQL-SERVER服务器上,在服务中将SQLANGENT服务的登录帐户,设置为域管理员帐户,同时该帐户要能够登录客户机,这样包执行就正确。客户机没有加入域而且是Win98:在SQL-SERVE... 阅读全文

posted @ 2007-08-02 10:15 JYun 阅读(291) 评论(0) 推荐(0) 编辑

2007年6月21日

原创 爱因斯坦迷题及推导过程

摘要:今天下午没事,看2007年第6期程员序,正好看到爱因斯坦迷题这块,闲着没事,推导一下,下面是推导过程:在一条街上,有5座房子,喷了5种颜色,每个房里住着不同国籍的人,每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物  问题是:谁养鱼?  提示:  1、英国人住红色房子  2、瑞典人养狗  3、丹麦人喝茶  4、绿色房子在白色房子左面  5、绿色房子主人喝咖啡  6、抽Pall Mall 香烟的人... 阅读全文

posted @ 2007-06-21 17:44 JYun 阅读(634) 评论(1) 推荐(0) 编辑

2007年3月13日

转 “主动程序员”与“被动程序员”

摘要:我觉得这个世界上的程序员 可以分为两种:"主动程序员"和"被动程序员"。"主动程序员"可以自己选择开发方式,开发语言和框架,"被动程序员"被动接受公司指定的语言和开发方 式。其实在现实生活中,这种分类并不绝对,一个程序员可能在不同的时候担当不同的角色,"被动程序员"也可能享有有限的主动权。这么分类并不以程序员本身 的知名度,财富多少,是否自己创业还是受雇于人有关。  David Heinemeie... 阅读全文

posted @ 2007-03-13 22:46 JYun 阅读(194) 评论(1) 推荐(0) 编辑

2007年1月7日

转 ORM之硬伤

摘要:原贴 http://www.cnblogs.com/Barton131420/archive/2007/01/07/613955.html园子里有些人,他们真以为自己明白了面向对象,然后装着满腹经纶,侃侃而谈,一篇接一篇,不厌其烦地喊着ORM如何如何。你以为他真的明白“面向对象”么?其实,他对面向对象的理解仅限于教科书中的封装、继承和多态,或者再知道一点面向对象的若干原则但... 阅读全文

posted @ 2007-01-07 19:19 JYun 阅读(391) 评论(0) 推荐(0) 编辑

2006年12月13日

转 程序员学习的革命-如何使用大脑

摘要:本文链接地址:http://blog.csdn.net/thefirstwind/archive/2006/12/13/1440965.aspx标题:程序员学习的革命,教你如何使用大脑作者:邢晓宁时间:2006年12月13日声明:版权没有,随你任转很多人搞技术,还有很多转行搞技术,搞了一段时间终于发现,自己不适合作技术,又退了回去。要我说其实就是用脑方式的问题,真的学会适当的用脑方式,编程编起来才... 阅读全文

posted @ 2006-12-13 17:01 JYun 阅读(324) 评论(0) 推荐(0) 编辑


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK