[英]iOS panGesture with images from NSArray
我每個人
我有一個帶有圖像的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];
}
我個人要做的是在屏幕外創建一個新的UIImageView
,然后為進入屏幕的動畫設置動畫,而另一個動畫離開屏幕。
如果您不希望動畫跟隨手指運動,則可以這樣做,如果您這樣做,則應使用@sergio在其答案中建議的UIPanGestureRecognizer
。
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%時,可以在屏幕外完全對其進行動畫處理(也可以對next / prevImage進行動畫處理,以使其完全顯示)。
您可以使用UIImageView
或CALayer
處理3張圖像。
這是一個非常基本的方案,如果您更喜歡在UIViewController
工作,那就很好。 您可能還會想到擁有一個自定義UIView
保存三個圖像(在CALayers
內部),然后在layoutSubviews
CALayers
它們CALayers
。
無論如何,由於我假設您有3張以上的圖像,因此您還需要一些邏輯,以便在移至下一張圖像時更新要處理的3張圖像。 這將在上面列出的點上增加第4點:
移至下一個(上一個)圖像后:
4.1設置prevImage(nextImage),使其指向curImage;
4.2設置curImage指向nextImage(prevImage);
4.3使nextImage(previImage)指向數組中的下一個(上一個)圖像。
希望這可以幫助。
最簡單的技巧是使用UIPanGestureRecognizer
或將視圖直接放入UIScrollView
。
然后檢查用戶何時停止拖動(例如, UIScrollView
委托)。 如果他已經足夠滾動,則將視圖設置為打開位置的動畫,否則將其設置為基本位置的動畫。
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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.