首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含UITableView和UITableViewCell的UIImageView

包含UITableView和UITableViewCell的UIImageView
EN

Stack Overflow用户
提问于 2015-06-13 16:49:40
回答 1查看 395关注 0票数 0

好的,所以我只能在UIImageViews的边框外滚动,但是我需要能够在这些视图的顶部滚动。UIImageView包含潘手势、捏手势,我不确定这是否导致了错误。我将粘贴我的手机代码如下:

代码语言:javascript
复制
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!
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-13 17:38:29

摇水和滚动是“相同”的手势。

问题是,imageView的pan手势识别器正在识别并处理手势(而不是失败或将触摸传递给单元格/tableView)。

如果您希望能够在任何方向平移您的图像,您可以做的是在tableViewCell上设置pan手势识别器,而不是图像。

然后检查手势的位置是否在imageView内。如果是的话,开始这个手势,这样潘手势就会认出它。当您在单元格外" pan“时,该手势将不会被pan手势识别,并且可以被识别为滚动。

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

更新:

根据您编辑的问题,您需要做的是使您的手势识别器区分拖动和滚动。同样,这些都是类似的手势。

如果你触摸一个图像,然后移动你的手指,iOS怎么知道你是想拖动这个图像,还是滚动这个表?,你需要做一个有根据的猜测:

  • 如果手势是向左的,那很可能是个阻力。pan手势识别器应识别该手势。
  • 如果手势是向上或向下,它很可能是一个卷轴。pan手势识别器应该会使手势失败。

更新2:

这是您的pan手势识别器的代码,以确定触摸应该是拖动还是滚动。

代码语言:javascript
复制
- (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;
}

这将阻止pan手势识别器识别垂直手势为平底锅,他们应该滚动表,如您所愿。

您可以在similar questions中找到更多信息。

尽管如此,其他开发人员已经绕过了这个泛滚动tableView问题,使用了一个长新闻手势来启动拖动。在这种情况下,很明显,任何pan手势都将用于启动拖动,否则任何手势都将滚动表(或滑动单元格)。

您的应用程序可能不需要滑动删除,但它通常是好的,不干预,冲突,或改变行为的预期姿态,用户已经知道。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30821160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档