2013-12-09 141 views
0

試圖抓住Xcode,似乎在過去幾周取得了一些進展。第二觸摸動畫

有誰知道自定義按鈕可以在第二次點擊時執行另一組動畫的方式。

因此,讓我說我有一個自定義按鈕和它的馬里奧,當我點擊它時,他從屏幕中間運行出屏幕的右側,然後從左側跑回到中間屏幕上,他也會發出噪音。

- (IBAction)marioRunning_clicked:(id)sender 
{ 

    [UIView animateWithDuration:1.50 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ 
     marioRunning.center = CGPointMake(350.5, 456.0); 
    } completion:^(BOOL finished) { 
     if (finished) { 
      [UIView animateWithDuration:0.00 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ 
       marioRunning.center = CGPointMake(-30.5, 456.0); 
      } completion:^(BOOL finished) { 
       if (finished) { 
        [UIView animateWithDuration:1.50 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ 
         marioRunning.center = CGPointMake(160.0, 456.0); 
        } completion:^(BOOL finished) { 
         if(finished) // NSLog (@"Finished !!!!!"); 
         marioRunning.center = CGPointMake(160.0, 456.0); 
        }]; 
       } 
      }]; 
     } 
    }]; 

    marioRunning.imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"mario-running2"],[UIImage imageNamed:@"mario-running3"],nil]; 

    marioRunning.imageView.animationDuration = 0.15; 
    marioRunning.imageView.animationRepeatCount = 19; 

    [marioRunning.imageView startAnimating]; 
} 

我怎麼能讓他做了第二組動畫的下一個點擊:

我已經使用此代碼來實現這一點?例如,不是從左到右跑,如果我第二次點擊他,他會跳起來和下去?

回答

1

使用按鈕的選擇狀態來決定做哪個動畫

-(void)buttonClicked:(UIButton*)button 
{ 
    if(button.selected) 
    { 
      [self doAnimation1]; 
    } 
    else 
    { 
      [self doAnimation2]; 
    } 

    button.selected = !button.selected; 
} 
+0

這真是太棒了,一旦我將我的代碼安裝到它上面,它就非常感謝你。你知道是否有一種方法可以播放第三個動畫,或者至少讓第一個動畫播放兩次,然後再播放第二個動畫? –

0

這可能是矯枉過正,但這裏做你想做什麼一個很酷的方式:

使UIButton一個子類,姑且稱之爲DDDMarioButton

typedef void (^DDDAnimationBlock)(UIButton *button); 

@interface DDDMarioButton : UIButton 

- (void)addAnimationBlockToQueue:(DDDAnimationBlock)block; 

@end 

然後在DDDMarioButton.m

@interface DDDMarioButton() 

@property (nonatomic, strong) NSMutableArray *animationQueue; 

@end 

@implementation DDDMarioButton 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    } 
    return self; 
} 

- (void)buttonPressed:(id)button 
{ 
    DDDAnimationBlock block = self.animationQueue[0]; 
    block(self); 
    [self.animationQueue removeObjectAtIndex:0]; 
} 

- (void)addAnimationBlockToQueue:(DDDAnimationBlock)block 
{ 
    if(!self.animationQueue) 
    { 
     self.animationQueue = [NSMutableArray new]; 
    } 

    [self.animationQueue addObject:block]; 
} 

@end 

然後無論您在哪裏創建按鈕,都可以逐一添加每個步驟:

DDDMarioButton *button = [[DDDMarioButton alloc] initWithFrame:CGRectZero]; 

[button addAnimationBlockToQueue:^(UIButton *button) { 
    // perform some animation 
}]; 

[button addAnimationBlockToQueue:^(UIButton *button) { 
    // perform another animation 
}]; 

而且應該這樣做。我沒有測試過這個,你可能需要一些配置,但這就是這個想法。

+0

喂白鯨,不是我忘恩負義你的答案對這個問題,我可以恢復到該選項可進行多個動畫,但我希望得到一個較短的答案,我可以更好地理解,因爲我正在學習,所以另一個答案就是我的街道。謝謝 –