UIView动画始终从当前状态开始

时间:2017-11-20 16:25:43

标签: ios objective-c animation uiview

@interface ViewController
@property(weak) IBOutlet UIView *blackView;
@end

(1)首先我尝试使用动画块

- (IBAction) buttonHitted:(id)sender
{
    [UIView beginAnimations: nil context: NULL];

    [UIView setAnimationBeginsFromCurrentStatus: NO];
    self.blackView.center = CGPointMake(UIScreen.mainScreen.bounds.size.width - self.blackView.center.x, self.blackView.center.y);

    [UIView commitAnimations];
}

动画始终从当前状态开始,我无法长时间找出原因。

(2)然后我尝试使用代码块,这是悲伤的。

- (IBAction) buttonHitted:(id)sender
{
    [UIView animateWithDuration:2.0 delay:0.0 options:0
                     animations:^(void)
                     {
                         self.blackView.center = CGPointMake(UIScreen.mainScreen.bounds.size.width - self.blackView.center.x, self.blackView.center.y);
                     }
                     completion:nil];
}
//Options to 0, indicating that UIViewAnimationOptionBeginFromCurrentState not setted

我只想知道为什么动画始终从当前状态开始。我检查了视图的属性,它始终是当前动画的最后一个值。

1 个答案:

答案 0 :(得分:0)

我想我找到了背后的原因。

属性的动画(如UIView_ins.center和CALayer_ins.transform)可以混合在一起,即使你只是改变了它的一部分,就像中心一样。

此外,CAAnimation必须将此属性设置为YES,因此转换的默认CAAction也必须将此设置为YES。

user.invitecode = coalesce(lnames.title, "Mr")

所以新动画不会覆盖飞行中的一个,而只是将它们混合在一起。

确保将UIView动画选项更改为@property(getter=isAdditive) BOOL additive;

UIViewAnimationOptionCurveLinear

你会看到可爱的UIView站在那里很长一段时间没有做任何事情,这是线性混合的象征:)

使用默认的EaseInOut选项时,它看起来像- (IBAction) buttonHitted:(id)sender { [UIView animateWithDuration:3.0 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^(void) { self.blackView.center = CGPointMake(UIScreen.mainScreen.bounds.size.width - self.blackView.center.x, self.blackView.center.y); } completion:nil]; } 的问题。