对于UIView常见的动画方法为:


[UIView animateWithDuration:0.35f animations:^{ } completion:^(BOOL finished) {}];

 

其中animations block中,如果存在多个属性的同时变化,则需要注意他们的书写顺序

首先讲原则:

block中多个动画变化的总效果,应等效为:按照其顺序拆成分步骤的多个动画逐个执行最终达成的效果。

然后举例,如:

以下为使self.view随着屏幕由纵向转向横向的正确的动画实现:


[UIView animateWithDuration:0.35f animations:^{
                    
                    self.view.frame = landFrame; // 将self.view横向变宽,纵向变短
                    self.view.transform = CGAffineTransformMakeRotation(M_PI_2);
                    
                } completion:nil];

如下为错误的实现:


[UIView animateWithDuration:0.35f animations:^{
                    
                    self.view.transform = CGAffineTransformMakeRotation(M_PI_2);
                    self.view.frame = landFrame; 
                    
                } completion:nil];

正确实现的思路:先将self.view变宽变扁,然后旋转。
以上错误的实现中:先将self.view旋转,旋转结束时,其frame已经是横向宽,纵向短,这时再 frame= landFrame 意图使之横向变宽,则没有意义。

 

UIView animateWithDuration 的animate block中的顺序问题

发表评论

电子邮件地址不会被公开。 必填项已用*标注

浙公网安备 33010602005964号