我是每个人,
我有一个带有图像的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];
}
答案 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];
}
编辑:
为了能够显示您正在平移的图像旁边的其他图像,您基本上需要执行以下操作:
将所有3张图片(例如,prevImage,curImage,nextImage)添加到您的视图中,以便它们显示在另一个旁边;
当你在curImage周围平移时,你也会移动其他的;
当curImage位移超过当前视图的50%时,您可以在屏幕上完全设置动画(并设置下一个/ prevImage动画,以便完全显示)。
您可以使用UIImageView
或CALayer
处理3张图片。
这是一个非常基本的方案,如果您更喜欢在UIViewController
内工作,那就很好了。您可能还会考虑使用自定义UIView
来保存三个图像(CALayers
内部)并在layoutSubviews
中处理它们。
在任何情况下,由于我认为你有3张以上的图像,所以你还需要一些逻辑,以便在你移动到下一张图像时更新你正在处理的3张图像。这将为上面列出的那些增加第4点:
:
4.1设置prevImage(nextImage),使其指向curImage;
4.2将curImage设置为指向nextImage(prevImage);
4.3 make nextImage(previImage)指向数组中的下一个(上一个)图像。
希望这有帮助。
答案 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>