2012-01-15 6 views
7

Есть ли способ анимировать образ фонового изображения UIButton с набором изображений?Анимация UIButton background image

Мне удалось сделать это с помощью свойства imageView, но не удалось найти эквивалентное свойство фона.

10x

ответ

1

Чтобы изменить кнопки Backround изображение или текст по этому вопросу - вы должны изменить его для конкретного UIControlState ... т.е. Подчеркнута, Selected, Disabled

Использование

- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state

Я не уверен, можете ли вы их оживить, я никогда не пробовал. Если вы не можете их оживить, вы можете поместить UIImageView за прозрачную кнопку и вместо этого оживить образы, а не просто мысль.

+0

Я поставил UIImageView под прозрачной кнопкой. Немного взломанный, но что я могу сказать - это сработало! 10x – Rizon

0

Да, это возможно. Используйте NSTimer,

NSTimer * myTimer = [NSTimer scheduleTimerWithTimeInterval: 5,00 target: self selector: @selector (changeImage) userInfo: nil repeatts: YES];

затем, метод заключается в следующем,

- (void)changeImage 
{ 

      static int counter = 0; 

      if([bannerArray count] == counter) 
      { 
        counter = 0; 
      } 
      [button setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:bannerArray[counter]]]] forState:UIControlStateNormal]; 

      counter++; 
} 

Он работал для меня. Но добавление анимации, например, флип и т. Д., Необходимо выяснить. Надеюсь, это также один из способов помочь вам в этом.

1

Вы можете анимировать UIButton, как вы анимировать UIImageView как это ...

-(void) addAnimationToButton:(UIButton*) button{ 
    UIImageView* animationView = [button imageView]; 
    NSArray* animations=[NSArray arrayWithObjects: 
         [UIImage imageNamed:@"sprite1.png"], 
         [UIImage imageNamed:@"sprite2.png"], 
         [UIImage imageNamed:@"sprite2.png"], 
         //and so on if you need more 
         nil]; 
    CGFloat animationDuration = 2.0; 
    [animationView setAnimationImages:animations]; 
    [animationView setAnimationDuration:animationDuration]; 
    [animationView setAnimationRepeatCount:0]; //0 is infinite 
} 

И использовать его как это:

[self addAnimationToButton:yourButton]; 
[[yourButton imageView] startAnimating]; //or stopAnimating 
11

Вот что я сделал (внутри подкласса UIButton):

Установите кнопки изображения, как обычно:

[self setBackgroundImage:[[UIImage imageNamed:@"button"] resizableImageWithCapInsets:UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0)] forState:UIControlStateNormal]; 
[self setBackgroundImage:[[UIImage imageNamed:@"button_pressed"] resizableImageWithCapInsets:UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0)] forState:UIControlStateHighlighted]; 

Override выделены:

- (void)setHighlighted:(BOOL)highlighted { 
    [UIView transitionWithView:self duration:0.25 options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowAnimatedContent animations:^{ 
     [super setHighlighted:highlighted]; 
    } completion:nil]; 
} 
+0

Это блестящее решение –