2014-12-17 3 views
1

Я хотел бы создать кнопку, которая будет отображаться всего 5 секунд, а затем исчезнет. Пользователь должен нажать кнопку, прежде чем она исчезнет. Поэтому я использую animationWithDuration установить альфа-1, а затем установить его на 0. Вот мой код ...UIButton показать и исчезнуть с анимацией

__block UIButton *showButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 150, 40)]; 

[showButton setTitle:@"go to next page!" forState:UIControlStateNormal]; 
showButton.alpha = 0; 
[showButton addTarget:self action:@selector(showButtonClick) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:showButton]; 

[UIView animateWithDuration:1 
         delay:0 
        options: UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
        showButton.alpha = 1.0; 
       } 
       completion:nil]; 

[UIView animateWithDuration:0.5 
         delay:3.0 
        options: UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionAllowUserInteraction 
       animations:^{ 
        showButton.alpha = 0.0; 
       } 
       completion:^(BOOL finished){ 
        [showButton removeFromSuperview]; 
        showButton = nil; 
       }]; 

-(void)showButtonClick{ 
    NSLog(@"click") 
} 

Но showButtonClick не дозвонились. Что я делаю неправильно?

+0

Когда вы нажмите на кнопку? После того, как кнопка полностью виден или пока она видна во время первой анимации? –

+0

После того, как кнопка полностью виден. Задержка, похоже, не работает. – Jenny

ответ

0

Вы должны создать NSTimer или что-то еще, чтобы вызвать анимацию. Потому что одновременно вызывается ваша анимация. Вот почему вы не смогли нажать кнопку, поэтому showButtonClick не звонил.

+0

yeh, you r right. Я добавляю dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t) (5 * NSEC_PER_SEC)), dispatch_get_main_queue(),^{}); – Jenny

+0

Знаете ли вы, почему аргумент задержки в animateWithDuration: delay: optoins: animations: complete: метод все еще заставляет анимацию блокировать buttonClick? – Jenny

2

Попробуйте этот код:

UIButton *showButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 150, 40)]; 

[showButton setTitle:@"go to next page!" forState:UIControlStateNormal]; 
showButton.alpha = 0; 
[showButton addTarget:self action:@selector(showButtonClick) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:showButton]; 


[UIView animateWithDuration:1 
         delay:0 
        options: UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
        [showButton setHidden:NO]; 
        showButton.alpha = 1.0; 
       } 
       completion: { 

        [UIView animateWithDuration:0.5 
              delay:0 
             options: UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionAllowUserInteraction 
             animations:^{ 
             showButton.alpha = 0.0; 
             } 
             completion:^(BOOL finished){ 
             [showButton setHidden:YES]; 
        }]; 
}]; 



-(void)showButtonClick{ 
    NSLog(@"click") 
} 
+0

Он все еще не может работать. Я нахожу ответ. Спасибо за ваш ответ :) – Jenny

+0

С какими проблемами вы столкнулись с этим кодом? – Mrunal

0
[UIView animateWithDuration:5.0 
    animations:^{ 
    initWithFrame:CGRectMake(100, 0, 150, 40) 
    //Animation code goes here 
    } completion:^(BOOL finished) { 
    //Code to run once the animation is completed goes here 
    [your button remove from removefromsuperview]; 
}]; 

Я не могу понять, почему вы используете анимацию в два раза ..... а ваша кнопка кадр распределяется initWithFrame: CGRectMake (0, 0, 150, 40) ..... проверьте код анимации выше .... он будет анимировать кнопку от 0 до 100 .... после завершения анимации кнопка будет удалена ...