簡體   English   中英

iOS panGesture與來自NSArray的圖像

[英]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];

}

編輯:

為了能夠在您正在平移的圖像旁邊顯示另一圖像,基本上,您需要執行以下操作:

  1. 將所有3張圖片(例如prevImage,curImage,nextImage)添加到您的視圖中,以便它們彼此相鄰顯示;

  2. 當您在curImage上平移時,還可以移動其他圖像;

  3. 當curImage位移超過當前視圖的50%時,可以在屏幕外完全對其進行動畫處理(也可以對next / prevImage進行動畫處理,以使其完全顯示)。

您可以使用UIImageViewCALayer處理3張圖像。

這是一個非常基本的方案,如果您更喜歡在UIViewController工作,那就很好。 您可能還會想到擁有一個自定義UIView保存三個圖像(在CALayers內部),然后在layoutSubviews CALayers它們CALayers

無論如何,由於我假設您有3張以上的圖像,因此您還需要一些邏輯,以便在移至下一張圖像時更新要處理的3張圖像。 這將在上面列出的點上增加第4點:

  1. 移至下一個(上一個)圖像后:

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM