2

Привет всем У меня есть UIViewController и UIImageView, и у меня есть SwipeGestureRecognizer. Так что если пользователь проведите пальцем влево или вправо, он будет changeUIImageView image.So далеко его работает. Я не могу использовать UIScrollView размер одного из изображений, с поддержкой пейджинга. Я хочу добиться эффекта перетаскивания и увидеть часть следующего UIImageView, как в UIScrollView изображений.Как изменить изображение UIImageView с помощью SwipeGestureRecognizer?

enter image description here

+0

так что вы хотели бы сделать изменение изображения с помощью салфетки вместо Scrollview, но с тем же «эффектом»? – incmiko

+0

Да, часть изменения изображения работает со стрелками влево или вправо. Да, я пытаюсь добиться такого же эффекта, как если бы изображения находились в uiscrollview изображений при запуске, вы можете увидеть часть следующего или предыдущего изображения – veereev

+0

без UIScrollview вы не можете ожидать, что эффект, подобный UIImage2, должен немедленно прийти к UIImage1. Но вы можете изменить изображения на основе прокрутки с помощью UISwipeGesture Recognozer. Для этого вам необходимо динамически выводить изображения из изображений NSArray. – wesley

ответ

1

* Вы можете попробовать что-то imageView.layer, чтобы дать некоторое эффект анимации. *

+0

Привет, спасибо за ответ .. Я смотрю анимацию, можете ли вы привести пример того, как это можно достичь? – veereev

2

Добавить scroollview в MainView (набор кадра соответственно)

[mainview addSubview:scr]; 

написать метод, как:

- (void)setupScrollView:(UIScrollView*)scrMain { 
} 

Затем в viewDidLoad проход Scrollview к методу,

[self setupScrollView:scr]; 



- (void)setupScrollView:(UIScrollView*)scrMain { 
    // we have 10 images here. 
    // we will add all images into a scrollView & set the appropriate size. 

    for (int i=1; i<=5; i++) { 
     // create image 
//  UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"sti%02i.png",i]]; 
     UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"sti%02i.png",i]]; 
     // create imageView 
//  NSLog(@"===============>%d",i); 
     UIImageView *imgV = [[UIImageView alloc] initWithFrame:CGRectMake((i-1)*scrMain.frame.size.width, 0, scrMain.frame.size.width, scrMain.frame.size.height)]; 
     // set scale to fill 
     imgV.contentMode=UIViewContentModeScaleToFill; 
     // set image 
     [imgV setImage:image]; 
     // apply tag to access in future 
     imgV.tag=i+1; 
     // add to scrollView 
     [scrMain addSubview:imgV]; 
    } 
    // set the content size to 10 image width 
    [scrMain setContentSize:CGSizeMake(scrMain.frame.size.width*5, scrMain.frame.size.height)]; 
    // enable timer after each 2 seconds for scrolling. 
    // [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:nil userInfo:nil repeats:YES]; 
} 

It позвольте вам двигаться как в ужасном ctions вручную.

+0

привет спасибо, но я не могу использовать uiscrollview :) – veereev

+0

scrollview только для того, чтобы содержать всю рамку изображения. Вы можете перетаскивать изображения с тем же кодом ... попробуйте использовать его, а затем дайте мне знать, чего вы хотите. – preetam

1

Я думаю, что лучше будет использовать UIPanGestureRecognizer:

UIPanGestureRecognizer * pan1 = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(moveObject:)]; 
pan1.minimumNumberOfTouches = 1; 
[image1 addGestureRecognizer:pan1]; 

-(void)moveObject:(UIPanGestureRecognizer *)pan; 
{ 
image1.center = [pan locationInView:image1.superview]; 
} 

когда вы начинаете перетаскивание проверить как-то направление. если направление слева направо, добавьте изображение «до» на экран с помощью -image.width и в методе перемещения переместите это изображениеBefore.center = [pan locationInView: image1.superview]; слишком. Если направление направо налево, добавьте «следующее» изображение в scree с + screenize + image.width и int it move move, переместите это изображениеNext.center = [pan locationInView: image1.superview]; слишком.

Я не пробовал это, но я думаю, он должен работать. Я надеюсь, что это помогает

EDIT:

Я нашел для вас, как определить направление:

-(void)moveObject:(UIPanGestureRecognizer *)pan; 
{ 

    CGPoint vel = [pan velocityInView:self.view]; 
    if (vel.x > 0) 
    { 
     // user dragged towards the right 
     counter++; 
    } 
    else 
    { 
     // user dragged towards the left 
     counter--; 
    } 
} 
+0

привет спасибо, я пытаюсь ваш код .. что такое «rec»? в CGPoint vel = [rec speedInView: self.view] ;? – veereev

+0

О, я сожалею: D это должен быть кастрюля, не rec Я его отредактировал – incmiko

+0

Привет, спасибо. Можете ли вы дать мне более подробную информацию о том, если направление справа налево, добавьте «следующее» изображение в scree с + screenize + image.width и int he move method, переместите это изображениеNext.center = [pan locationInView: image1.superview]; слишком. .. Я не получил его, хотя :) – veereev

3

Простой ответ:

Добавить два жест для представления изображения и поместите одну переменную счетчика , переключить значение счетчика на основе прокрутки и нет. изображений. Наконец, измените изображение на основе подсчета.

Используйте этот код, чтобы он работал отлично и просто.

- (void)addAnimationPresentToView:(UIView *)viewTobeAnimated 
{ 
    CATransition *transition = [CATransition animation]; 
    transition.duration = 0.30; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
    [transition setValue:@"IntroSwipeIn" forKey:@"IntroAnimation"]; 
    transition.fillMode=kCAFillModeForwards; 
    transition.type = kCATransitionPush; 
    transition.subtype =kCATransitionFromRight; 
    [viewTobeAnimated.layer addAnimation:transition forKey:nil]; 

} 

- (void)addAnimationPresentToViewOut:(UIView *)viewTobeAnimated 
{ 
    CATransition *transition = [CATransition animation]; 
    transition.duration = 0.30; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
    [transition setValue:@"IntroSwipeIn" forKey:@"IntroAnimation"]; 
    transition.fillMode=kCAFillModeForwards; 
    transition.type = kCATransitionPush; 
    transition.subtype =kCATransitionFromLeft; 
    [viewTobeAnimated.layer addAnimation:transition forKey:nil]; 

} 
       - (void)viewDidLoad 
       { 
        [super viewDidLoad]; 
        count = 0; 
        // Do any additional setup after loading the view from its nib. 
        [self.imageViewSwipe setUserInteractionEnabled:YES]; 
        UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)]; 
        UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRight:)]; 

        // Setting the swipe direction. 
        [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft]; 
        [swipeRight setDirection:UISwipeGestureRecognizerDirectionRight]; 

        // Adding the swipe gesture on image view 
        [self.imageViewSwipe addGestureRecognizer:swipeLeft]; 
        [self.imageViewSwipe addGestureRecognizer:swipeRight]; 


       } 
       -(void)changeImage 
       { 
        switch (count) { 
         case 1: 
          self.imageViewSwipe.image = [UIImage imageNamed:@"Screen Shot 2013-09-17 at 10.57.51 AM.png"]; 
          break; 
         case 2: 
          self.imageViewSwipe.image = [UIImage imageNamed:@"Screen Shot 2013-09-17 at 10.58.04 AM.png"]; 
          break; 
         case 3: 
          self.imageViewSwipe.image = [UIImage imageNamed:@"Screen Shot 2013-09-17 at 10.58.00 AM.png"]; 
          break; 

         default: 
          break; 
        } 
       } 
       -(void)handleSwipe:(id)sender 
       { 
       if(count < 4) 
       { 
        count++; 
        UIImageView *moveIMageView = self.imageViewSwipe; 
        [self addAnimationPresentToView:moveIMageView]; 
        [self changeImage]; 
       } 

       } 
       -(void)handleSwipeRight:(id)sender 
       { 
        if(count>0) 
        { 
         count--; 
        UIImageView *moveIMageView = self.imageViewSwipe; 
       [self addAnimationPresentToViewOut:moveIMageView]; 
         [self changeImage]; 
        } 

       } 
        -(void)handleSwipe:(id)sender 
        { 
        if(count < 4) 
        { 
         count++; 
         [self changeImage]; 
        } 

        } 
        -(void)handleSwipeRight:(id)sender 
        { 
         if(count>0) 
         { 
          count--; 
          [self changeImage]; 
         } 

        } 
+0

этот ответ не очень хороший, это изменит только изображение, не изменит изображение с эффектом scrollview, так что это не ответ для вопрос – incmiko

+1

Теперь проверьте эффект анимации, добавленный как для правого, так и для левого салфетки. – Ganapathy

+0

Хороший, полезный ответ. – Devang

0
-(void)panTableView:(UISwipeGestureRecognizer *)pan{ 
    if (pan.state==UIGestureRecognizerStateEnded) { 
     int curr=currentPage; 

     if (pan==self.panGestureLeft) 
     { 
      // user dragged towards the right 

       CATransition *transition = [CATransition animation]; 
       transition.duration = 0.35; 
       transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
       transition.type = kCATransitionPush; 
       transition.subtype =kCATransitionFromRight; 
       transition.delegate = self; 
       [scrollview.layer addAnimation:transition forKey:nil]; 


     } 
     else if (pan==self.panGestureRight) 
     { 
      // user dragged towards the left 

       CATransition *transition = [CATransition animation]; 
       transition.duration = 0.35; 
       transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
       transition.type = kCATransitionPush; 
       transition.subtype =kCATransitionFromLeft; 
       transition.delegate = self; 
       [scrollview.layer addAnimation:transition forKey:nil]; 


     } 



} 

}

0

Реализовать горизонтального стола Scrolling

Создать TableView и преобразовать таблицу

self.horizontalTableView.transform = CGAffineTransformMakeRotation(-M_PI * 0.5); 

Затем применяется преобразование в обратном направлении на содержимое внутри клетка.

CGAffineTransformMakeRotation(M_PI * 0.5) 

Если вы хотите, вы можете поместить его в другую TableView внутри пользовательских UITableViewCell, и имеет вертикальную таблицу горизонтальных таблиц.

Вы получаете все преимущества Native прокрутки

Смотрите этот учебник:

http://www.raywenderlich.com/4723/how-to-make-an-interface-with-horizontal-tables-like-the-pulse-news-app-part-2

Смежные вопросы