2015-06-13 6 views
0

Итак, я могу прокручивать только за пределами UIImageViews, но мне нужно прокручивать поверх этих представлений. UIImageView содержит Жесты Жесты, Жесты Пинча, и я не уверен, вызывает ли это ошибку. Я вставлю свой код ячейки ниже:UITableView с UITableViewCell, содержащий UIImageView

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    imageIndex = indexPath.row 

    var cell : XpandDraggableCell = tableView.dequeueReusableCellWithIdentifier("XpandDraggableCell", forIndexPath: indexPath) as! XpandDraggableCell 

    cell.imgview.backgroundColor = UIColor(red: 210, green: 211, blue: 213, alpha: 1.0) 

    if (horizontal) { 
     defaultX = defaultSpacingX * imageIndex; /* E.g 70 * 2 = 140 from origin X. */ 
    }else{ 
     defaultY = defaultSpacingY * imageIndex; /* E.g 70 * 2 = 140 from origin Y. */ 
    } 

    cell.imgview.frame = CGRect(x: cell.imgview.frame.origin.x, y: cell.imgview.frame.origin.y, width: 75.0, height: 75.0) 
    var cellWidth : CGFloat = cell.contentView.frame.width 
    var cellHeight : CGFloat = cell.contentView.frame.height 
    cell.imgview.center = CGPoint(x: cell.contentView.frame.origin.x + (cellWidth/2), y: cell.contentView.frame.origin.y + (cellHeight/2)) 
    cell.imgview.image = UIImage(named: images[imageIndex]) /*Image provided*/ 
    cell.imgview.contentMode = UIViewContentMode.ScaleAspectFit 
    cell.imgview.userInteractionEnabled = true 
    cell.imgview.tag = imageIndex 

    var addToViewPanGesture : UIPanGestureRecognizer = UIPanGestureRecognizer(target: self, action: Selector("imageViewPanned:")) 
    cell.imgview.addGestureRecognizer(addToViewPanGesture) 

    var doubleTapAddGesture : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("cellDoubleTapped:")) 
    doubleTapAddGesture.numberOfTapsRequired = 2 
    cell.imgview.addGestureRecognizer(doubleTapAddGesture) 

    cell.imgview.backgroundColor = UIColor.clearColor() 
    cell.imgview.layer.backgroundColor = UIColor.clearColor().CGColor 
    cell.imgviewbtn.backgroundColor = UIColor.clearColor() 
    cell.backgroundColor = UIColor(red: 210, green: 211, blue: 213, alpha: 1.0) 

    return cell 
} 


class XpandDraggableCell : UITableViewCell{ 
    @IBOutlet var imgviewbtn: UIButton! 
    @IBOutlet var imgview: UIImageView! 
} 
+0

Похоже, что все изображение видно. Что нужно для панорамирования изображения? –

+0

В основном это функция перетаскивания. Вы перетаскиваете изображение из контейнера справа, влево, чтобы опустить его поверх созданного мной EnvironmentImageView и иметь возможность создавать сцену по вашему выбору. –

+0

Теперь речь идет о перетаскивании. Из того, что вы изначально задали, вы только упоминали ячейки и изображения таблицы, и ваша проблема звучала так, будто речь шла о панорамировании ** внутри ячейки. Я создаю новый вопрос, покажу весь экран и объясню, перетаскиваете ли вы извне таблицы внутри таблицы, внутри таблицы за пределы таблицы или все внутри таблицы. :) –

ответ

2

Панорамирование и прокрутка - это «тот же» жест.

Проблема заключается в том, что распознаватель жеста изображения viewView распознает жест и обрабатывает его (вместо того, чтобы терпеть неудачу или передать касание к cell/tableView).

Если вы планируете панорамировать свое изображение в любом направлении, то вы можете установить распознаватель жеста панорамы на tableViewCell вместо изображения.

Затем проверьте, находится ли местоположение жестов в пределах изображения. Если это так, начните жест, поэтому жест панорамы распознает его. Когда вы «панорамируете» вне ячейки, этот жест не будет распознан жестом панорамы и может быть распознан как свиток.

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    CGPoint point = [gestureRecognizer locationInView:self.view]; 
    CGRect frame = self.imageView.frame; 
    if (CGRectContainsPoint(frame, point)) 
    { 
     return YES; 
    } 
    else 
    { 
     return NO; 
    } 
} 

Update:

Основываясь на отредактированном вопрос, что вы должны сделать, это сделать ваш жест распознаватель различать перетаскивания и прокрутки. Опять же, это аналогичные жесты.

Если вы касаетесь изображения, а затем переместите палец, как iOS может знать, хотите ли вы перетащить изображение или прокрутить таблицу? Вы будете иметь, чтобы сделать обоснованное предположение:

  • Если жест влево, то, скорее всего сопротивление. Жест жеста распознаватель должен распознать жест.

  • Если жест вверх или вниз, это, скорее всего, свиток. Жест жеста распознаватель должен нести жест.

Update 2:

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

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    UIView *gestureView = [gestureRecognizer view]; 
    CGPoint translation = [gestureRecognizer translationInView:[gestureView superview]]; 

    // Check for horizontal gesture 
    if (fabsf(translation.x) > fabsf(translation.y)) 
    { 
     return YES; 
    } 

    return NO; 
} 

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

Дополнительную информацию вы найдете в similarquestions.

Сказав это, другие разработчики обошли эту проблему с панорамой или прокруткой tableView, используя длинный жест нажатия, чтобы инициировать перетаскивание. В этом случае ясно, что любой жест жеста будет для инициированного перетаскивания, иначе любой жест будет прокручивать таблицу (или прокручивать ячейку).

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

+0

Хорошо, так это позволит мне прокручивать изображения в камере без прокрутки за пределами поля uiimageview? –

+0

И чтобы быть ясным, мне нужно установить жесты панорамы на ячейки, а не на изображения сейчас? –

+0

Да, и да. Это позволит вам панорамировать изображение (распознаватель жестов), когда ваше прикосновение находится в пределах изображения, или прокручивать таблицу (встроенный жест), когда ваше прикосновение находится вне изображения. –

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