2013-09-08 3 views
0

Я создаю контроллер представления, и я ввел в него UIImageView, я сделал NSArray, который содержит изображения, и я прошел в UIImageView, и я добавил UISwipeGestureRecognizer для левой правой прокрутки.анимация для UIImageView

Этот код работает, но изображения приходят, когда стреляют, как стрела без эффектов или перехода, есть ли способ добавить простой переход между ними?

Вот код:

NSArray *images = [[NSArray alloc] initWithObjects: 
       @"1-r.png", 
       @"2-r.png", 
       @"3-r.png", 
       @"4-r.png", 
       @"5-r.png", 
       nil]; 

UISwipeGestureRecognizerDirection direction = [(UISwipeGestureRecognizer *)sender direction]; 

switch (direction) { 
    case UISwipeGestureRecognizerDirectionLeft: 
     imageIndex++; 
     break; 
    case UISwipeGestureRecognizerDirectionRight: 
     imageIndex--; 
     break; 

    default: 
     break; 
} 

imageIndex = (imageIndex < 0) ? ([images count] - 1) : imageIndex % [images count]; 
_imageView.image = [UIImage imageNamed:[images objectAtIndex:imageIndex]]; 
+0

Это Cocoa Touch, а не Cocoa (тогда это вопрос OS X). Рассмотрите возможность форматирования кода правильно. Добавление пробелов при необходимости делает код более читаемым. –

ответ

0

добавить UIImgaView к вашему ViewController и создать IBOutled imgView. добавьте следующий код в файл .m-файла вашего viewcontroller.

- (UIImage *) prev { 
    NSInteger index = [self.imgView.animationImages indexOfObject: self.imgView.image]; 
    if (index > 0) { 
     return [self.imgView.animationImages objectAtIndex: index - 1]; 
    } 
    return self.imgView.animationImages.lastObject; 
} 

- (UIImage *) next { 
    NSInteger index = [self.imgView.animationImages indexOfObject: self.imgView.image]; 
    if (index < self.imgView.animationImages.count - 1) { 
     return [self.imgView.animationImages objectAtIndex: index + 1]; 
    } 
    return [self.imgView.animationImages objectAtIndex: 0]; 
} 

- (void) swipeRight { 
    UIImageView *topView = [[UIImageView alloc] initWithFrame: self.imgView.frame]; 
    topView.image = [self prev]; 
    topView.alpha = 0.0; 
    [self.view addSubview: topView]; 
    [self animateImages]; 
} 

- (void) swipeLeft { 
    UIImageView *topView = [[UIImageView alloc] initWithFrame: self.imgView.frame]; 
    topView.image = [self next]; 
    topView.alpha = 0.0; 
    [self.view addSubview: topView]; 
    [self animateImages]; 
} 

- (void) animateImages { 
    UIImageView *topView = self.view.subviews.lastObject; 
    [UIView animateWithDuration: 0.5 delay: 0.0f options: UIViewAnimationOptionCurveEaseInOut animations: 
    ^(void) { 
     topView.alpha = 1.0; 
    } completion: ^(BOOL finished) { 
     self.imgView.image = topView.image; 
     [topView removeFromSuperview]; 
    }]; 
} 

- (void) viewDidLoad { 
    NSArray *imageNames = [[NSArray alloc] initWithObjects: 
      @"1-r.png", 
      @"2-r.png", 
      @"3-r.png", 
      @"4-r.png", 
      @"5-r.png", 
      nil]; 
    NSMutableArray *images = [NSMutableArray array]; 
    for (NSString *filename in imageNames) { 
     [images addObject: [UIImage imageNamed: filename]]; 
    } 
    self.imgView.animationImages = images; 
    self.imgView.userInteractionEnabled = YES; 
    self.imgView.image = [images objectAtIndex: 0]; 
    UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget: self action: @selector(swipeRight)]; 
    rightSwipe.direction = UISwipeGestureRecognizerDirectionRight; 
    UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget: self action: @selector(swipeLeft)]; 
    leftSwipe.direction = UISwipeGestureRecognizerDirectionLeft; 
    [self.imgView addGestureRecognizer: leftSwipe]; 
    [self.imgView addGestureRecognizer: rightSwipe]; 
} 
+0

чувак, этот код не работает, он дал мне это: «неявное преобразование из enumeratoin type» enum uiviewanimation » – user2731024

+0

Я исправил свой ответ. извините за неудобства! – hacker2007

+0

человек, предупреждение, о котором мы говорим ранее, исчезло, но фотографии в NSArray по-прежнему появляются без помощи перехода plzz. – user2731024

Смежные вопросы