iOS panGesture与来自NSArray的图像

时间:2013-05-21 15:10:49

标签: iphone ios

我是每个人,

我有一个带有图像的NSArray,并且无法通过向左或向右平移从一个图像传递到另一个图像(就像在iPhone照片库中一样)。我的图片来自集合视图。因此,第一个显示的图像是我在集合视图中选择的图像。

现在,我可以显示正确的图像并向左或向右移动此图像,但我不知道如何显示其他图像,当我的视图中图像超过50%时,它会移动到中心。

非常感谢。

这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    //NSLog(@"%i", _indexPhoto);

    self.photoImageView.image = [UIImage imageNamed:[_photosCollectionArray objectAtIndex:_indexPhoto]];


    UIPanGestureRecognizer *recognizer;
    recognizer = [[UIPanGestureRecognizer alloc]initWithTarget: self action: @selector(panGestureHandle:)];

    [recognizer setMinimumNumberOfTouches:1];
    [recognizer setMaximumNumberOfTouches:1];
    [[self view] addGestureRecognizer:recognizer];

}


-(void) panGestureHandle:(UIPanGestureRecognizer *) sender {

    NSLog(@"Pan Gesture Handling");
    UIPanGestureRecognizer *pangesture = (UIPanGestureRecognizer *)sender;
    CGPoint translation = [pangesture translationInView:self.view];

    CGPoint imageViewPosition = _photoImageView.center;
    imageViewPosition.x += translation.x;

    _photoImageView.center = imageViewPosition;
    [pangesture setTranslation:CGPointMake(0, 0) inView:self.view];

}

4 个答案:

答案 0 :(得分:0)

我个人会做的是在屏幕上创建一个新的UIImageView,然后设置它进入屏幕的动画,而另一个动画出现在屏幕外。

如果您不关心让动画跟随手指移动,那么如果您这样做,则应该使用UIPanGestureRecognizer作为@sergio在其答案中建议。

答案 1 :(得分:0)

UISwipeGestureRecognizer不适合使用,因为它是一个离散的手势,与之关联的消息只发送一次。

您需要的是UIPanGestureRecognizer:这将允许您跟踪手指移动并相应地为图像设置动画。

这是如何完成手势处理的基本示例:

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {

  CGPoint translation = [recognizer translationInView:self.view];
  recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, 
                                     recognizer.view.center.y + translation.y);
  [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];

}

编辑:

为了能够显示您正在平移的图像旁边的其他图像,您基本上需要执行以下操作:

  1. 将所有3张图片(例如,prevImage,curImage,nextImage)添加到您的视图中,以便它们显示在另一个旁边;

  2. 当你在curImage周围平移时,你也会移动其他的;

  3. 当curImage位移超过当前视图的50%时,您可以在屏幕上完全设置动画(并设置下一个/ prevImage动画,以便完全显示)。

  4. 您可以使用UIImageViewCALayer处理3张图片。

    这是一个非常基本的方案,如果您更喜欢在UIViewController内工作,那就很好了。您可能还会考虑使用自定义UIView来保存三个图像(CALayers内部)并在layoutSubviews中处理它们。

    在任何情况下,由于我认为你有3张以上的图像,所以你还需要一些逻辑,以便在你移动到下一张图像时更新你正在处理的3张图像。这将为上面列出的那些增加第4点:

      移至下一张(上一张)图片后
    1. 4.1设置prevImage(nextImage),使其指向curImage;

      4.2将curImage设置为指向nextImage(prevImage);

      4.3 make nextImage(previImage)指向数组中的下一个(上一个)图像。

    2. 希望这有帮助。

答案 2 :(得分:0)

最简单的诀窍是使用UIPanGestureRecognizer或将视图直接放入UIScrollView

然后检查用户何时停止拖动(例如UIScrollView上的委托)。如果他滚动得足够多,则将视图设置为打开位置的动画,否则将其设置为基准位置。

答案 3 :(得分:0)

try to add `CATransition` to your view

首先添加滑动手势

    UISwipeGestureRecognizer *recognizer;

recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeLeft:)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)];
[contentView addGestureRecognizer:recognizer];
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRight:)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
[contentView addGestureRecognizer:recognizer];

处理滑动

-(void)handleSwipeLeft:(UISwipeGestureRecognizer *)sender{
    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.type = kCATransitionPush;
    transition.subtype=kCATransitionFromRight;
    [contentView.layer addAnimation:transition forKey:nil];

}

 -(void)handleSwipeRight:(UISwipeGestureRecognizer *)sender{  

    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.type = kCATransitionPush;
    transition.subtype=kCATransitionFromLeft;
    [contentView.layer addAnimation:transition forKey:nil];

}

别忘了添加#import <QuartzCore/QuartzCore.h>