您的位置:首页 > 其它

Auto Layout和动画一起使用出现的问题

2016-01-08 19:52 453 查看
众所周知Auto Layout是随着他约束的控件的位置改变而改变

1.在一个UIView里面添加一个UIImageView,然后给UIImageView添加约束



2.修改PopMenuframe,让其边移动遍缩小 self.frame
= CGRectMake(44, 44, 0, 0); 


3.这时候会出现UIImageView中的Image也就是小女孩图片会直接变白如图






4.为什么会出现这个问题呢?我们在上面说过Auto Layout是随着他约束的控件的位置改变而改变,在第3步把UIIMageView的相对约束控件也就是说,PopMenu这个View的尺寸设置为self.frame = CGRectMake(44, 44, 0, 0); 只要执行这句代码,UIImageView的尺寸会瞬间变为0

5.那我怎么证明 UIImageView的尺寸会瞬间变为0?具体看图

5.1修改PopMneu的尺寸为 self.frame = CGRectMake(44, 44,
50, 50);


5.2运行起来的效果





也就是说白色为他的父控件的颜色其实不是uiImageView变白色的

6.那这个问题怎么解决呢?

//修改父控件的尺寸
self.frame = CGRectMake(44, 44, 0, 0);
//当父控件的尺寸修改了,需要重绘一次,ImageView就不会瞬间变成白色的了
// 应要记住把这句代码放在下面,如果把这句代码放在self.frame = CGRectMake(44, 44, 0, 0);上面是没有意义的,就相当于下面的代码没有写<span style="font-family: Arial, Helvetica, sans-serif;">[self layoutIfNeeded];</span>




7. 以上是一种解决办法,其实还有一种解决办法就是用transform动画效果

//利用transform动画就可以让子控件随着父控件的缩小而缩小,也就是说可以把Layout去掉
// 这里一定要搞一个最小点,缩小比例是0最小,1为他的本身,这里不要搞成0,如果搞成0就会瞬间变没有


self.transform = CGAffineTransformMakeScale(0.01, 0.01);
// 让其移动
self.center = CGPointMake(44, 44);
<span style="color: rgb(69, 69, 69); font-family: 'PingFang SC'; font-size: 14px; font-weight: bold;">//这样就可以把问题解决了</span>
8.但是有的同学想Layout 和transform一起用那就又会出现瞬间变白的效果

// 不去掉Layout就会瞬间变白因为父控件缩小,layout就会瞬间缩小
self.transform = CGAffineTransformMakeScale(0.01, 0.01); 
// 让其移动
self.center = CGPointMake(44, 44);
// 那怎么解决呢?
<span style="color:#ff6600;">
// 解决办法
<span style="color: rgb(69, 69, 69); font-family: Arial, Helvetica, sans-serif;">// 先移动 当代码执行到这一行的时候,UIImageView的Layout判断他没有缩小尺寸,只是移动了位置,他就只是更改位置他就会调整自己,其图片尺寸并不会缩小</span>
self.center = CGPointMake(44, 44);



self.transform = CGAffineTransformMakeScale(0.01, 0.01); 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  布局