(iOS 5.1,XCode 4.4) 在我正在进行的项目中,我有两个控制器,它们分别设置相同UIView的框架属性(分别设置大小和位置),在时间上重叠的单独动画块中(第二个动画块在第一个动画块之前启动)完成)。这似乎导致了UIView位置的奇怪跳跃(非动画变化)。
要重现的最小示例(放置在新的单个视图项目(iphone)的viewcontroller中,并将某个按钮连接到action方法)。
@interface ViewController ()
@property (nonatomic, strong) UIView *viewA;
@end
@implementation ViewController
- (IBAction)buttonPressed
{
// Animate
[UIView animateWithDuration:5 animations:^{
self.viewA.frame = CGRectMake(0, self.viewA.frame.origin.y, 320, 200);
}];
[UIView animateWithDuration:5 animations:^{
self.viewA.frame = CGRectMake(0, 200, 320, self.viewA.frame.size.height);
}];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.viewA = [[UIView alloc] init];
self.viewA.backgroundColor = [UIColor orangeColor];
self.viewA.frame = CGRectMake(0, 100, 320, 100);
[self.view addSubview:self.viewA];
}
@end
按下按钮,您将看到视图跳跃大约50个像素(移动距离的一半)。
如果有人知道为什么会这样,和/或如何解决这个问题,我很乐意听取您的意见。提前谢谢你,
帕特里克
答案 0 :(得分:2)
您可以使用UIViewAnimationOptionBeginFromCurrentState
选项来避免跳转:
[UIView animateWithDuration:5.0 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
self.viewA.frame = CGRectMake(0, 200, 320, self.viewA.frame.size.height);
} completion:nil];
答案 1 :(得分:0)
这就是块的工作原理,你同时做两个动画,试试这个。
[UIView animateWithDuration:5 animations:^{
self.viewA.frame = CGRectMake(0, self.viewA.frame.origin.y, 320, 200);
}
completion:^(BOOL finished) {
self.viewA.frame = CGRectMake(0, 200, 320, self.viewA.frame.size.height);
}
];