0

UIScrollViewは多くのビューを含むことができるを持っています。適切なスクロールを可能にするために (スクロール中にコンテンツがビューの外に出ないようにするため)、 myMain.sotryboardで my をクリックしUIScrollView、属性インスペクターでClip Subviewsプロパティを許可しました:

3 番目のプロパティは次のとおりです。サブビューのクリップ

私の問題: 私にあるすべてのビューUIScrollViewsはドラッグ可能です (それらはすべて を持っているためUIPanGestureRecognizerです。そのため、それらを私の外側にドラッグしようとするとUIScrollView、それらは消えてしまいます。 実際、他のすべてのビューの後ろに移動しています。

例を挙げると、先例からビューを削除できる他のコンポーネントがありますUIScrollView。そのため、そこからドラッグアンドドロップを開始すると、ビューが消えて、ビューをドロップした 2 番目のコンポーネントに再び表示されます。

私が試したこと: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 に答える