@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
我只想知道为什么动画始终从当前状态开始。我检查了视图的属性,它始终是当前动画的最后一个值。
答案 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];
}
的问题。