1

与えられた:

 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 で間違っていることを知っていれば、助けてください。すべてのコメントはここで高く評価されます

4

0 に答える 0