改变照片时如何设置 UIImageView 缩放动画

How to set UIImageView zoom animation when the photo being changed

如题,我是初学者,不知道怎么解决。

在我的代码中,当我第一次打开模拟器时它只有缩放动画,

我想在每张照片变化时都有缩放动画,

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
     NSArray *animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.jpg"],
                                [UIImage imageNamed:@"2.jpg"],
                                [UIImage imageNamed:@"3.jpg"],
                                [UIImage imageNamed:@"4.jpg"],nil];

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10,10,300,300)];
    imageView.animationImages = animationImages ;
    imageView.animationRepeatCount = 0;
    imageView.animationDuration= 12.0;
    [imageView startAnimating];
    [self.view addSubview:imageView];

    imageView.frame = CGRectMake(150, 150, 20, 20);
    CGPoint center = imageView.center;
    [UIView animateWithDuration: 1.0f animations:^{
        imageView.frame = CGRectMake(10, 10, 300, 300);
        imageView.center = center;
    }];
}

提前感谢您在此提供的任何帮助。

如果您希望在每个图像过渡时使用缩放动画,那么使用 animationImages 并不是最简洁的代码。我会创建自己的自定义 UIView class 来自己处理转换,以便动画可以与每个转换紧密同步。但是,为了快速回答您的问题,我将使用计时器 运行 动画,其频率与图像转换的频率大致相同。随着时间的推移,计时器变得不太准确,因此最终缩放效果不再与图像过渡对齐。

@interface NameOfYourViewController ()

@property(nonatomic, strong) UIImageView* imageView;
@property(nonatomic, strong) NSTimer* imageTransitionTimer;
@property(nonatomic, assign) CGFloat imageScale;
- (void)animateImage;

@end

@implementation NameOfYourViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
     NSArray *animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.jpg"],
                                [UIImage imageNamed:@"2.jpg"],
                                [UIImage imageNamed:@"3.jpg"],
                                [UIImage imageNamed:@"4.jpg"],nil];

    self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10,10,300,300)];
    selfimageView.animationImages = animationImages ;
    self.imageView.animationRepeatCount = 0;
    self.imageView.animationDuration= 12.0;
    [self.imageView startAnimating];
    [self.view addSubview:self.imageView];

    self.imageScale = 1.0f;
    self.imageTransitionTimer = [NSTimer scheduledTimerWithTimeInterval:imageView.animationDuration target:self selector:@selector(animateImage) userInfo:nil repeats:YES];
    [self.imageTransitionTimer fire];
}

- (void)animateImage
{
   [UIView 
     animateWithDuration:1.0 
     delay:0.0
     options:0
     animations:^void () {
       self.imageView.transform = CGAffineTransformMakeScale(
         self.imageScale,
         self.imageScale 
       );
     }
     completion:^void(BOOL finished) {
       self.imageScale += 0.3f;
     }
   }]; 
}

@end