1

(iOS 5.1,XCode 4.4)在我正在处理的一个项目中,我有两个控制器都设置相同 UIView 的 frame 属性(分别设置大小和位置),在时间重叠的单独动画块中(第二个动画块在第一个完成之前开始)。这似乎会导致 UIView 的位置出现奇怪的跳跃(无动画变化)。

重现的最小示例(放置在新的单视图项目(iphone)的视图控制器中,并将一些按钮连接到操作方法)。

@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 像素(移动距离的一半)。

如果有人知道为什么会发生这种情况和/或如何解决这个问题,我很想听听你的意见。先感谢您,

帕特里克

4

2 回答 2

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];
于 2012-07-30T21:23:05.973 回答
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);
 }
];
于 2012-07-30T21:22:26.650 回答