Как прикрепить событие click к анимированной кнопке в ios - PullRequest
1 голос
/ 01 марта 2012

У меня есть подвижная кнопка, и я хотел бы выполнить метод, когда пользователь нажимает эту кнопку - возможно ли это в ios?

Я написал следующий код, но анимация должна быть завершена, чтобы можно было запустить эту функцию:

[arrowButton addTarget:self action:@selector(presentMainWindow) forControlEvents:UIControlEventTouchUpInside];


[UIView animateWithDuration:kAnimationDuration
                          delay:.2f
                        options:UIViewAnimationOptionCurveEaseInOut 
                     animations:
     ^{
         [arrowButton setTransform:CGAffineTransformMakeTranslation(kButtonShift, 0)];
         [arrowButton setFrame:CGRectMake(arrowButton.frame.origin.x + kButtonShift, arrowButton.frame.origin.y, arrowButton.frame.size.width, arrowButton.frame.size.height);
     } 
                     completion:nil]; 

Ответы [ 2 ]

5 голосов
/ 03 марта 2012

Я обнаружил, что вы можете просто добавить параметр UIViewAnimationOptionAllowUserInteraction к анимации для обработки как анимации, так и взаимодействия:

 [UIView animateWithDuration:kAnimationDuration
                          delay:.2f
                        options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionAllowUserInteraction
                     animations:
     ^{
         [arrowButton setTransform:CGAffineTransformMakeTranslation(kButtonShift, 0)];
    } 
                     completion:nil]; 
0 голосов
/ 01 марта 2012

, пока анимация - это только эффект, который вы можете увидеть и не можете коснуться, вы можете только нажать кнопку во время анимации, если вы делаете свою собственную анимацию, как это

Я не знаю, является ли это лучшим решением, но это рабочее решение.

- (IBAction)startanimation:(id)sender {

    old = CGPointMake(arrowButton.frame.origin.x,arrowButton.frame.origin.x);
    [self ani];


}
- (void)ani {
    NSLog(@"ani1");

    if (arrowButton.frame.origin.x < old.x + kButtonShift ) {

        NSTimer*myTimer;

        myTimer = [NSTimer scheduledTimerWithTimeInterval:kTimeInterval/kButtonShift*4 target:self selector:@selector(ani2) userInfo:nil repeats:NO];

}
}
- (void)ani2 {
    NSLog(@"ani2");

    arrowButton.frame = CGRectMake((arrowButton.frame.origin.x + 1), arrowButton.frame.origin.y, arrowButton.frame.size.width, arrowButton.frame.size.height);
    [self ani];

}
...