与えられた:
1.logo
2.viewA contains:
a.username (uitextfield)
b.password (uitextfield)
c.login button
ゴール
1. shift a logo upward
2. when shifting is done, the view will be shown
最初のアプローチ
[UIView animateWithDuration: オプション: アニメーション: 完了:] の使用
[UIView animateWithDuration:.4 delay:0
options:UIViewAnimationOptionCurveLinear
animations:^{
CGRect newFrame = self.logo.frame;
newFrame.origin.y = 29;
self.logo.frame = newFrame;
}
completion:^(BOOL finished) {
self.viewA.alpha = 1;
}
];
これは私にとって完璧に機能します
ただし、私はまだ以下の2番目のアプローチを説得しています
2 番目のアプローチ
まずロゴを上にずらして、やっています
CABasicAnimation *theAnimation;
theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.translation.y"];
theAnimation.duration=1;
theAnimation.autoreverses=NO;
theAnimation.fromValue = [NSNumber numberWithFloat:0];
theAnimation.toValue = [NSNumber numberWithFloat:-60];
theAnimation.removedOnCompletion = NO;
theAnimation.fillMode = kCAFillModeForwards;
[self.flipgiveLogo1.layer addAnimation:theAnimation forKey:@"animateLayer"];
第二に、私はできる
self.viewA.alpha = 1;
ビューを表示します。残念ながら、操作は順番どおりに実行されません。
ブロックを使用して操作が順番に実行されることを保証するという最初のアプローチはまずありません。以下のようにGrand Central Dispatchを使用してみました
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
// shifting logo goes here
dispatch_sync(dispatch_get_main_queue(), ^{
//displaying viewA goes here
});
});
これはまだ私を悩ませています。私がここで GCD で間違っていることを知っていれば、助けてください。すべてのコメントはここで高く評価されます