2014-02-16 1 views
0

Итак, я пытаюсь реализовать перетаскивание с помощью эскизов изображений, полученных с использованием ALAssets Framework.Получение объекта UIImageView для отображения при перетаскивании (с помощью UILongPressGestureRecognizer)

Я могу заставить долгожданный жест работать правильно (его определенно перемещение что-то вокруг на основе какого-то теста NSLog), но не может для меня жизнь выяснить, как на самом деле отображать уменьшенное изображение и перетащить его вокруг в главном окне. Обратите внимание, что _dNewImageView был добавлен IBOutlet к контроллеру вида. Я пытаюсь вывести представление вперед с помощью метода bringSubviewToFront: однако его работа не работает должным образом. Любая помощь будет оценена!

Вот функция для обработки длинный пресс жест:

-(void)longGestureRecognized:(UILongPressGestureRecognizer *)gestureRecognizer{ 
    gestureRecognizer.delaysTouchesBegan = YES; 
    CGPoint newPoint = [gestureRecognizer locationInView:self.collectionView]; 

    switch (gestureRecognizer.state) { 
     case UIGestureRecognizerStateBegan: 
      dIndexPath = [self.collectionView indexPathForItemAtPoint:newPoint]; 
      if (dIndexPath == nil){ 
       NSLog(@"Couldn't find index path"); 
      } 
      dCell = (SKPhotoCell *)[self.collectionView cellForItemAtIndexPath:dIndexPath]; 
      dImage = [UIImage imageWithCGImage:[dCell.asset thumbnail]]; 
      _dNewImageView = [[UIImageView alloc] initWithImage:dImage]; 
      [_dNewImageView setUserInteractionEnabled:YES]; 
      [[self view] bringSubviewToFront:_dNewImageView]; 
      break; 

     case UIGestureRecognizerStateChanged: 
      [_dNewImageView setCenter:newPoint]; 
      break; 

     case UIGestureRecognizerStateEnded: 
      break; 
    } 
} 

ответ

0

Две вещи, которые нужно добавить:

[self.view insertSubview:_dNewImageView aboveSubview:self.collectionView]; где бы вы выделить и инициализировать _dNewImageView.

и

[gestureRecognizer setTranslation:CGPointZero inView:gestureRecognizer.view]; в вашем методе распознавания жеста.

Если вы повторно используете _dNewImageView, как предлагает ваш код, вы не должны выделять и инициализировать его каждый раз, когда вызывается метод. Использовать [_dNewImageView setImage:dImage];

Кроме того, когда вы проверяете, существует ли indexPath, убедитесь, что вы каким-то образом применили метод для возврата или обхода содержимого изображения.

Например:

- (void) someOtherMethod { 
    _dNewImageView = [[UIImageView alloc] init]; 
    _dNewImageView.frame = CGRectSomething; 
    _dNewImageView.userInteractionEnabled = YES; 
    [self.view insertSubview:_dNewImageView aboveSubview:self.collectionView]; 
} 

- (void) longGestureRecognized:(UILongPressGestureRecognizer *)gestureRecognizer { 
    ... 
     case UIGestureRecognizerStateBegan: 
      ... 
      if (dIndexPath == nil) { 
       NSLog(...); 
       return; /*or*/ goto noIndexPath; 
      } 
      ... 
     break; 

    //if used 'goto' 
    noIndexPath: 
     [gestureRecognizer setTranslation:CGPointZero inView:gestureRecognizer.view]; 

    ... 
} 
+0

Спасибо за помощь! Все работает за исключением [gestureRecognizer setTranslation: CGPointZero inView: gestureRecognizer.view]; , который дает показания об ошибке: Нет видимых @interface для «UILongPressGestureRecognizer» заявляет селектор «setTranslation: INview:» Я попытался добавить UILongPressGestureRecognizer в качестве делегата, но это не является действительным. – gsheld

+0

Убедитесь, что ваш @interface включает в себя oneiric

+0

К сожалению, я тоже это пробовал. Ошибка не меняется. – gsheld