好的,所以我只能在UIImageViews的边框外滚动,但是我需要能够在这些视图的顶部滚动。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!
}发布于 2015-06-13 17:38:29
摇水和滚动是“相同”的手势。
问题是,imageView的pan手势识别器正在识别并处理手势(而不是失败或将触摸传递给单元格/tableView)。
如果您希望能够在任何方向平移您的图像,您可以做的是在tableViewCell上设置pan手势识别器,而不是图像。
然后检查手势的位置是否在imageView内。如果是的话,开始这个手势,这样潘手势就会认出它。当您在单元格外" pan“时,该手势将不会被pan手势识别,并且可以被识别为滚动。
- (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怎么知道你是想拖动这个图像,还是滚动这个表?,你需要做一个有根据的猜测:
更新2:
这是您的pan手势识别器的代码,以确定触摸应该是拖动还是滚动。
- (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手势识别器识别垂直手势为平底锅,他们应该滚动表,如您所愿。
尽管如此,其他开发人员已经绕过了这个泛滚动tableView问题,使用了一个长新闻手势来启动拖动。在这种情况下,很明显,任何pan手势都将用于启动拖动,否则任何手势都将滚动表(或滑动单元格)。
您的应用程序可能不需要滑动删除,但它通常是好的,不干预,冲突,或改变行为的预期姿态,用户已经知道。
https://stackoverflow.com/questions/30821160
复制相似问题