2010-09-06 35 views
5

Tôi muốn xây dựng một hình ảnh động xung trên một UIImageView đơn giản. ImageView sẽ lớn hơn một chút, sau đó quay lại kích thước ban đầu của nó.Pulsing Animation

tôi đã sử dụng đoạn mã sau:

- (void) doCoolAnimation { 
    [UIView beginAnimations:@"glowingAnimation" context:nil]; 
    [UIView setAnimationRepeatAutoreverses:YES]; 
    [UIView setAnimationRepeatCount:INT_MAX]; 
    [UIView setAnimationDuration:0.25]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    imageView.transform = CGAffineTransformMakeScale(1.15, 1.15); 
    [UIView commitAnimations]; 
} 

này hoạt động tốt trên iOS3 nhưng chỉ hoạt động một phần trên iOS4.

Tôi có UITabBarController với 2 chế độ xem trong đó. Trong phần đầu tiên là imageView với hoạt ảnh và hoạt ảnh sẽ bắt đầu ngay sau khi chế độ xem được tải. Nhưng sau khi tôi chuyển sang chế độ xem thứ hai (sử dụng TabBar) và ngược lại, hoạt ảnh không chạy trên iOS4 nữa. (Nhưng trên iOS3 tôi có thể chuyển đổi giữa 2 chế độ xem này và hoạt ảnh vẫn hoạt động tốt.)

Tôi cũng đã thử với bộ hẹn giờ gọi doCoolAnimation mỗi giây, nhưng điều đó không giúp khởi động lại hoạt ảnh.

Ai đó có thể giải thích lý do tại sao sau khi xem chuyển đổi hoạt ảnh đã biến mất? Có cách giải quyết nào có thể làm cho nó hoạt động trên iOS4 không?

Trả lời

9

Sử dụng phương pháp đơn giản này: -

CABasicAnimation *pulseAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
pulseAnimation.duration = .5; 
pulseAnimation.toValue = [NSNumber numberWithFloat:1.1]; 
pulseAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
pulseAnimation.autoreverses = YES; 
pulseAnimation.repeatCount = FLT_MAX; 
[ButtonName.layer addAnimation:pulseAnimation forKey:nil]; 
+0

Đó là thực sự mát mẻ! Ngoài ra là có anyway để kiểm tra xem bất kỳ hình ảnh động đã xảy ra? – Mithuzz

1

ViewDidLoad chỉ được gọi là lần đầu tiên lượt xem tải. Vì chế độ xem không được phân bổ ngay lập tức khi bạn chuyển đổi chế độ xem, vì trong chế độ xem vẫn tồn tại, viewdidLoad không được gọi lại khi bạn quay lại chế độ xem.

Thử gọi [self doCoolAnimation]; trong viewDidAppear. Điều này được gọi là mọi lúc.

- (void)viewDidAppear:(BOOL)animated { 
    [self doCoolAnimation] 
}