2015-10-26 2 views
0

У меня есть NSArray из пяти изображений и UIImageView. Я хочу иметь возможность медленно увеличивать размер изображения внутри ImageView в течение 5 секунд, а затем перейти к следующему изображению и так далее. Как я могу это достичь?Loop ImageView Animation iOS

+0

in swift/Obj c? – Jamil

+0

Я хочу в Obj C –

ответ

0

Вот мое решение, он использует только 2% CPU на iPhone 6.

- (void)changeFrame{ 

    CGRect rect = self.imageView.frame; 

    rect.size.width = rect.size.width +0.25; 
    rect.size.height = rect.size.height + 0.25; 

    self.imageView.frame = rect; 

    counter ++; 

    if (counter == 130) { 
     index ++; 
     if (index == images.count) { 
      index = 0; 
     } 

     self.imageView.image = [images objectAtIndex:index]; 
     self.imageView.frame = firstRect; 

     self.myView.alpha = 0.0f; 
     self.myView.alpha = 1.0f; 

     counter = 0; 
    } 

} 

И я c все это с таймером:

index = 0; 
    counter = 0; 
    images = [[NSMutableArray alloc] init]; 
    NSInteger animationImageCount = 4; 
    for (int i = 0; i < animationImageCount; i++) { 
     // Images are numbered IndexedImagesInMyAnimation0, 1, 2, etc... 
     UIImage *image = [Globals imageWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"IndexedImagesInMyAnimation%d", i]] scaledToSize:[Globals aspectScaledImageSizeForImageView:self.imageView image:[UIImage imageNamed:[NSString stringWithFormat:@"IndexedImagesInMyAnimation%d", i]]]]; 

     [images addObject:image]; 
    } 

    self.imageView.image = [images objectAtIndex:0]; 
    self.myView.clipsToBounds = YES; 
    firstRect = self.imageView.frame; 

    timer = [NSTimer timerWithTimeInterval:0.1 
              target:self 
              selector:@selector(changeFrame) 
              userInfo:nil 
              repeats:YES]; 

    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 
1

Вы можете использовать блоки завершения, предоставляемые UIAnimation. В блоке завершения вы также можете изменить изображение, например.

Концепция:

func animateView(view: UIView, scale: CGFloat, duration: NSTimeInterval = 1, delay: NSTimeInterval = 0) 
{ 
    UIView.animateWithDuration(duration, delay: delay, options: [.CurveEaseInOut], animations: {() -> Void in 
     view.transform = CGAffineTransformMakeScale(scale, scale) 
     }, completion: { (Bool) -> Void in 
      self.animateView(nextImageView, scale: scale) 
    }) 
} 

Вы также можете попытаться найти Apple documentation или здесь, на StackOverflow

0

Моя идея для этой проблемы: я создам размер каждого изображения от мала до велика. и добавить весь массив. После этого я назначаю его анимации изображений UImageView. Я устанавливал продолжительность, повторяю счет и начинаю оживлять. Вы можете увидеть мой код:

NSMutableArray *test = [NSMutableArray array]; 
for (int i = 2; i <= 6; i++) { 
    [test addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%i", i]]]; 
} 
for (int i = 2; i <= 6; i++) { 
    [test addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%ir", i]]]; 
} 
self.imgTest.animationImages = [NSArray arrayWithArray:test]; 
self.imgTest.animationDuration = 10.0; 
self.imgTest.animationRepeatCount = 1; 
[self.imgTest startAnimating]; 

Решение 2: Вы можете использовать эту функцию

- (void)animate:(int)i { 
if (i >= self.listImage.count) { 
    return; 
} 
[UIView animateWithDuration:5 
         delay:0 
        options:UIViewAnimationOptionBeginFromCurrentState 
       animations:(void (^)(void)) ^{ 
        self.imgTest.transform=CGAffineTransformMakeScale(1.2, 1.2); 
       } 
       completion:^(BOOL finished){ 
        self.imgTest.transform=CGAffineTransformIdentity; 
//Fade 
        [UIView transitionWithView:self.imgTest 
             duration:1.0f 
             options:UIViewAnimationOptionTransitionCrossDissolve 
            animations:^{ 
             self.imgTest.image = self.test[i]; 
            } completion:^(BOOL finished){ 
             [self animate:i+1]; 
            }]; 
       }]; 
} 

И когда начинают просто звоните:

self.imgTest.image = self.listImage[0]; 
[self animate:0]; 
+0

Добавление большого количества изображений увеличит объем памяти –

+0

Проверьте мой отредактированный ответ. Надеюсь, эта помощь. –

+0

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