0

我大家,

我有一个带有图像的 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

4 回答 4

0

我个人会做的是在屏幕外创建一个新UIImageView的,然后动画它进入屏幕,而另一个动画离开屏幕。

如果您不关心让动画跟随手指移动,这当然是错误的,如果您这样做,您应该使用UIPanGestureRecognizer@sergio 在他的回答中建议的那样。

于 2013-05-21T15:15:45.100 回答
0

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

您需要的是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% 时,您将动画完全移出屏幕(并且还动画 next/prevImage 以使其完全显示)。

您可以使用UIImageView或处理这 3 个图像CALayer

这是一个非常基本的方案,如果您更喜欢在UIViewController. 您可能还想有一个自定义UIView保存三个图像(内部CALayers)并在layoutSubviews.

在任何情况下,由于我假设您有超过 3 张图像,因此您还需要一些逻辑,以便在您移动到下一张图像时更新您正在处理的 3 张图像集。这将为上面列出的增加第四点:

  1. 移动到下一个(上一个)图像后:

    4.1设置prevImage(nextImage)使其指向curImage;

    4.2 设置curImage指向nextImage(prevImage);

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

希望这可以帮助。

于 2013-05-21T15:16:02.147 回答
0

最简单的技巧是使用UIPanGestureRecognizer视图或将视图直接放入UIScrollView.

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

于 2013-05-21T15:17:22.703 回答
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>

于 2013-05-22T05:28:52.600 回答