2013-11-12 3 views
7

У меня есть UIButton созданного следующего кодИзменить фоновое изображение и анимировать UIButton при постукивании IOS 7

button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [button setImage:[UIImage imageNamed:@"refresh_icon.png"] forState:UIControlStateNormal]; 
    [button setImage:[UIImage imageNamed:@"reload_selected.png"] forState:UIControlStateSelected]; 
    [button addTarget:self action:@selector(buttonAction:)forControlEvents:UIControlEventTouchUpInside]; 
    [button setFrame:CGRectMake(0, 0, 20 , 20)]; 

Вот когда он нажал на buttonAction селектора называется и я анимировать кнопку вращения на 360 градусов например

- (void) buttonAction : (id) sender { 
    NSLog(@"Reload Button Clicked"); 
    [self runSpinAnimationOnView:self.button duration:1.0 rotations:1.0 repeat:0]; 

} 

- (void) runSpinAnimationOnView:(UIView*)view duration:(CGFloat)duration rotations:(CGFloat)rotations repeat:(float)repeat; 
{ 
    CABasicAnimation* rotationAnimation; 
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ]; 
    rotationAnimation.duration = duration; 
    rotationAnimation.cumulative = YES; 
    rotationAnimation.repeatCount = repeat; 

    [view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 
} 

Это работает хорошо, но это не то, что я на самом деле хочу. Я хочу, чтобы, щелкнув по моей кнопке, кнопка примет изображение «reload_selected.png» (которое я установил для UIControlStateSelected) в качестве фона, а затем запустите анимацию. Когда анимация закончена, кнопка снова вернется к ее фактическому фону («refresh_icon.png»).

Может кто-нибудь предложить некоторые изменения в коде, которые помогут мне достичь действия, описанного выше? Заранее спасибо за вашу помощь.

ответ

0

Вместо использования Core Animation вы можете использовать метод animateWithDuration:animations:completion:UIView. Этот метод позволяет вам указать уровень блокировки завершения, который вы можете использовать для сброса изображения после завершения анимации.

EDIT: ли что-то вроде

[view animateWithDuration:duration animations:^{ 
    //Do your animations here 
} completion: ^(BOOL finished){ 
    if(finished) { 
     //reset the image 
    } 
}]; 

Чтобы задать анимацию вы можете захотеть, чтобы оживить transform свойство представления с помощью CGAffineTransformRotate.

+0

Спасибо за ваш ответ. Можете ли вы предложить образец кода? – ayon

+0

См. Edit ... – Roshan

1

Вы можете попробовать, как это,

[UIView animateWithDuration:YOURDURATION 
      delay:0 
      options:(UIViewAnimationOptionCurveLinear) 
      animations:^ { 
          [button setImage:[UIImage imageNamed:@"reload_selected.png"] forState:UIControlStateSelected]; 
          button.transform = CGAffineTransformRotate(CGAffineTransformIdentity,M_PI * 2); 
         } 
      completion:^(BOOL finished) { 
          [button setImage:[UIImage imageNamed:@"refresh_icon.png"] forState:UIControlStateNormal]; 
         } 
    ]; 
+0

Я пробовал это в селекторе, называемом buttonAction, но, к сожалению, он не анимируется. Эта кнопка была настроена как пользовательский вид в UIBarbuttonItem. – ayon

+0

Итак, вы пытаетесь повернуть UIBarButtonItem ?. Это так. – Vedchi

+0

Да, я пытаюсь это сделать. – ayon

Смежные вопросы