1

(iOS 5.1、XCode 4.4)私が取り組んでいるプロジェクトには、同じUIViewのフレームプロパティを(それぞれサイズと位置を設定するために)設定する2つのコントローラーがあり、時間的にオーバーラップする別々のアニメーションブロックにあります(2番目のアニメーションブロックは最初のブロックが終了する前に開始されます)。これにより、UIViewの位置に奇妙なジャンプ(アニメーションなしの変更)が発生するようです。

再現するための最小限の例(新しいシングルビュープロジェクト(iphone)のviewcontrollerに配置し、アクションメソッドにボタンを接続します)。

@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 に答える