用动画替换静态UIImageView

时间:2012-06-07 11:49:59

标签: iphone objective-c ios animation uiimageview

我有一个UImageView我在界面构建器中设置了一个png(一双眼睛)来自我的资源。然后我想用一个眼睛闪烁的动画替换这个图像(在一段特定的时间之后)。

这是我在viewWillAppear中使用的代码:

NSString *fileName; 
    NSMutableArray *imageArray = [[NSMutableArray alloc] init];
    for(int i = 1; i < 12; i++) {
        fileName = [NSString stringWithFormat:@"HDBlinkPage1/hd_eyes_blinking%d.png", i];
        [imageArray addObject:[UIImage imageNamed:fileName]];
    }
    imgHDBlink.userInteractionEnabled = YES;
    imgHDBlink.animationImages = imageArray;
    imgHDBlink.animationDuration = 0.9;
    imgHDBlink.animationRepeatCount = 1;
    imgHDBlink.contentMode = UIViewContentModeScaleToFill;
    //[self.view addSubview:imgHDBlink];
    [imgHDBlink startAnimating];

在viewWillAppear中,我使用NSTimer每5秒触发一次动画:

[NSTimer scheduledTimerWithTimeInterval:5.0
                                     target:self
                                   selector:@selector(blinkAnimation)
                                   userInfo:nil
                                    repeats:YES];

问题是,当我运行应用程序时,我根本看不到初始静态图像。我只是每5秒钟看一次动画,但在这些动画之间没有睁开眼睛的图像。有谁可以帮我解决这个问题或指出我正确的方向?感谢。

1 个答案:

答案 0 :(得分:1)

5.0秒后添加动画图像。来自UIImageView文档:

  

数组必须包含UIImage对象。您可以在阵列中多次使用相同的图像对象。将此属性设置为nil以外的值会隐藏image属性表示的图像。默认情况下,此属性的值为nil。

如果预先设置animationImages数组,则不会显示图像。

编辑: (全部使用ARC)

- (void) viewDidLoad {
  [super viewDidLoad];

  //Initialize self.imgHDBlink
}

- (void) viewDidAppear: (BOOL) animated {
    [super viewDidAppear: animated];

    self.imgHDBlink.image = [UIImage imageNamed: @"static_image"];

    [NSTimer scheduledTimerWithTimeInterval: 5.0
                                     target: self
                                   selector: @selector(blinkAnimation:)
                                   userInfo: nil
                                    repeats: YES];
}

- (void) blinkAnimation: (NSTimer*) timer {

    self.imgHDBlink.animationImages = [NSArray array];  //Actually add your images here
    [self.imgHDBlink startAnimating];

    [self.imgHDBlink performSelector: @selector(setAnimationImages:) withObject: nil afterDelay: self.imgHDBlink.animationDuration];
}



//Remember this to stop crashes if we are dealloced
- (void) dealloc {
    [NSObject cancelPreviousPerformRequestsWithTarget: self 
                                             selector: @selector(blinkAnimation:) 
                                               object: nil];
}