Добавление UIPanGestureRecognizer во вновь созданный UIView и замена текущего представления слайдом

Я прочитал почти все сообщения, которые я могу найти на этом сайте. Я нашел несколько чрезвычайно полезных сообщений, но не совсем нашел, как решить мою проблему. Я пытаюсь создать трамплин для просмотра изображений, где пользователь может вставить следующее изображение на место, но остановится на полпути и вернуться назад. Я читал в многочисленных сообщениях, что PanGestureRecognizer — это то, что нужно, но мне было очень трудно с ним.

В раскадровке я создал свой ViewController, добавил PanGestureRecognizer в ViewController и добавил действие.

Вот мой .h:

@interface PanViewController : UIViewController
- (IBAction)PanGesture:(UIPanGestureRecognizer *)recognizer;
@end

Вот мой .м:

@interface PanViewController ()
@property (nonatomic, retain) NSArray *PhotoBundle;
@property (nonatomic, retain) NSMutableArray *PhotoArray;
@property (nonatomic, retain) NSMutableArray *ImgViewArray;
@end

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
//set i to the correct range if needed.
if (i > 0 && 1 <= _PhotoArray.count) {

}
else i = 0;

//create photo bundle from directory
_PhotoBundle = [[NSBundle mainBundle] pathsForResourcesOfType:@".jpg"inDirectory:@"Otter_Images"];
//create array from bundle of paths.
_PhotoArray = [[NSMutableArray alloc] initWithCapacity:_PhotoBundle.count];
for (NSString* path in _PhotoBundle)
{
    [_PhotoArray addObject:[UIImage imageWithContentsOfFile:path]];
}

//create initial image view
UIImage *currentImage = [[UIImage alloc] init];
currentImage = [_PhotoArray objectAtIndex:i];
UIImageView *currentIV = [[UIImageView alloc]initWithFrame:CGRectMake(100,100, 100, 100)];
[currentIV setImage:currentImage];
[self.view addSubview:currentIV];
//increment i to progress through array.
i++;
}

- (IBAction)PanGesture:(UIPanGestureRecognizer *)recognizer {
    [self GestureDirection:recognizer];
}

- (void)GestureDirection:(UIPanGestureRecognizer *)gestureRecognizer
{
CGPoint direction = [gestureRecognizer velocityInView:self.view];

if(direction.x > 0)
{
    NSLog(@"gesture went right");
    UIImage *nextImg = [[UIImage alloc] init];
    nextImg = [_PhotoArray objectAtIndex:i];
    UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(100,100, 100, 100)];
    UIImageView *nextIV = [[UIImageView alloc] initWithFrame:CGRectMake(100,100, 100, 100)];
    [nextIV setImage:nextImg];
    [newView addSubview:nextIV];

    self.view = newView;
}
else
    {
        NSLog(@"gesture went left");
    }
}

Он показывает следующее изображение на панораме, но тогда в новом загруженном представлении нет PanGestureRecongizer. Я думал, что когда я добавлю PANGesture в раскадровку, он сделает его доступным для всех представлений в ViewController.

Это может быть отдельный вопрос, но как заставить анимацию работать на PanGesture? У меня было неправильное (очевидно) впечатление, что Пан действительно будет скользить.

Спасибо за вашу помощь!!


person Siriss    schedule 30.10.2012    source источник
comment
Почему бы просто не использовать UIScrollView с пейджингом?   -  person Tom Irving    schedule 30.10.2012
comment
Это дает вам эффект перелистывания страниц? Если нет, то будет ли это лучшим решением? Спасибо!   -  person Siriss    schedule 30.10.2012
comment
Вы не получите причудливый керлинг, который вы найдете в iBooks, если вы это имеете в виду?   -  person Tom Irving    schedule 31.10.2012
comment
Да, это то, что я имел в виду, и я не хочу этого. Смогут ли пользователи остановиться на середине и вернуться назад?   -  person Siriss    schedule 31.10.2012
comment
Итак, я смог сделать это с помощью UIScroll и Paging ... есть ли способ сделать это таким образом для обучения? Спасибо!   -  person Siriss    schedule 01.11.2012
comment
Вам придется каждый раз программно добавлять UIGestureRecognizer во вновь добавленное представление.   -  person Tom Irving    schedule 01.11.2012
comment
а возможно добавить пейджинг программно? Спасибо еще раз.   -  person Siriss    schedule 01.11.2012


Ответы (1)


Итак, как сказал Том Ирвинг, я использовал UIScrollView с пейджингом. Я каждый раз экспериментировал с созданием нового распознавателя жестов и добавлением пейджинга, но это было очень сложно, и я так и не смог заставить его работать.

person Siriss    schedule 06.11.2012