如果我在动画块内部将属性设置两次到两个不同的值,会发生什么?如果我执行以下伪代码:
myView.frame = CGRectMake(0, 0, 50, 50); // state 0
[UIView beginAnimations:@"showBanner" context:NULL];
{
[UIView setAnimationDuration:2];
myView.frame = CGRectMake(0, 20, 50, 50); // state 1
myView.frame = CGRectMake(0, 10, 50, 50); // state 2
}
[UIView commitAnimations];
我应该得到以下哪些结果?
我希望结果#2发生,因为我认为在提交动画时会记录属性的状态。我在我的应用程序中得到一个行为,似乎表明结果#1正在发生,因此我的问题。
答案 0 :(得分:1)
(2)帧从状态0直接动画到状态2,忽略状态1.
答案 1 :(得分:1)
实际上答案是3.以上都不是。
动画块仅为该属性的最后一次状态更改设置动画。因此,在您的情况下,框架将从状态1动画到状态2。
答案 2 :(得分:0)
我需要回答这个问题,并且没有发现这里给出的任何一个都令人满意。我建立了一个快速测试,放置了一个像这样的小子视图:
- (void)viewDidLoad {
[super viewDidLoad];
self.testView = [[UIView alloc] initWithFrame:CGRectMake(0,0,40,40)];
self.testView.backgroundColor = [UIColor redColor];
[self.view addSubview:self.testView];
}
然后提供了两个替代动画:
- (void)animateWithSimpleBlock {
[UIView animateWithDuration:2 animations:^{
self.testView.frame = CGRectMake(200,200,40,40);
self.testView.frame = CGRectMake( 0,300,40,40);
}];
}
- (void)animateWithQualifiedBlock {
[UIView animateWithDuration:2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
self.testView.frame = CGRectMake(200,200,40,40);
self.testView.frame = CGRectMake( 0,300,40,40);
}];
}
以下是发生的情况:在animateWithSimpleBlock
上,testView从单个帧(无动画)跳转到它的初始0,0位置到中间位置200,200。从那里开始,它会在2秒内动画到最终的0,300位置。
但是animateWithQualifiedBlock
可以将testView平滑地从它的初始0,0位置动画到最终的0,300位置。这是我需要的行为(b / c我用动画块中调用的循环方法构建新的视图位置)。