0

我有一个UIScrollView能够包含许多视图的。为了允许良好的滚动(滚动时内容不会超出视图),在 my 上Main.sotryboard,我单击了 my UIScrollView,然后在属性检查器中我允许了该Clip Subviews属性:

第三个属性是:剪辑子视图

我的问题:我的所有视图UIScrollViews都是可拖动的(因为它们都有一个UIPanGestureRecognizer。所以,当我尝试将它们拖到我的外部时UIScrollView,它们就消失了。 事实上,它们只是落后于其他所有视图

举个例子,我还有其他组件允许从先例中删除视图UIScrollView。因此,当我从它开始拖放时,它会消失,然后重新出现在我放置视图的第二个组件中。

我尝试过的:我有一个特殊UIPanGestureRecognizer的拖放视图,来自 this UIScrollView。所以,我实际上有这个(显然,它不起作用,否则我不会在这里):

//Here recognizer is the `UIPanGestureRecognizer`
//selectpostit is the name of the view I want to drag
if(recognizer.state == UIGestureRecognizerStateBegan){
    selectpostit.clipsToBounds = NO;
}

关于如何改进它的任何想法?提前致谢。

4

2 回答 2

1

您可以尝试在每次手势开始时将 scrollView.clipsToBounds 重置为 NO,但这会导致在拖动过程中滚动视图之外的其他内容变得可见时产生副作用。

我建议在平移开始时拍摄可拖动视图的快照,将其放在滚动视图的父级上,然后移动它。这种方法应该可以解决您的问题。

这是代码:

- (void)onPanGesture:(UIPanGestureRecognizer*)panRecognizer
{
    if(panRecognizer.state == UIGestureRecognizerStateBegan)
    {
        //when gesture recognizer starts, making snapshot of the draggableView and hiding it
        //will move shapshot that's placed on the parent of the scroll view
        //that helps to prevent cutting by the scroll view bounds
        self.draggableViewSnapshot = [self.draggableView snapshotViewAfterScreenUpdates: NO];
        self.draggableView.hidden = YES;
        [self.scrollView.superview addSubview: self.draggableViewSnapshot];
    }

    //your code that updates position of the draggable view

    //updating snapshot center, by converting coordinates from draggable view
    CGPoint snapshotCenter = [self.draggableView.superview convertPoint:self.draggableView.center toView: self.scrollView.superview];
    self.draggableViewSnapshot.center = snapshotCenter;

    if(panRecognizer.state == UIGestureRecognizerStateEnded ||
       panRecognizer.state == UIGestureRecognizerStateCancelled ||
       panRecognizer.state == UIGestureRecognizerStateFailed)
    {
        //when gesture is over, cleaning up the snapshot
        //and showing draggable view back
        [self.draggableViewSnapshot removeFromSuperview];
        self.draggableViewSnapshot = nil;
        self.draggableView.hidden = NO;
    }
}
于 2016-06-03T10:34:02.023 回答
1

我建议你看看这篇文章 ray wenderlich用长按手势移动表格视图单元格

它解释了如何创建快照

于 2016-06-03T10:44:04.923 回答