1

そのUICollectionViewため、ユーザーがピンチアウトまたはピンチインして、コレクションセルを展開および折りたたむことができるようにしたいと考えています。このチュートリアルを使用して、ビットの展開と折りたたみを実行しました。これは機能します。次に、以下のコードをcollectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPathデリゲート メソッドに追加しました。

UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchCollection:)];
[cell addGestureRecognizer:pinchGesture];

pinchCollection:次に、次のようなアクションを作成しました。

-(void)pinchCollection:(id)sender {
    UIPinchGestureRecognizer *gesture = (UIPinchGestureRecognizer*)sender;
    if (gesture.state == UIGestureRecognizerStateBegan) {        
        if (gesture.scale <= -1) { // I also changed this to be gesture.scale < 1 but it didn't work. 
            // pinch in
            [self collapseCollection];
            gesture.scale = 1;

        }
        if (gesture.scale >= 1) { // I changed this to be gesture.scale > 1 but it didn't work either. 
            // pinch out 
            [self expandCollection];
            gesture.scale = -1;
        }
    }
}

ただし、ピンチアウトコードのみが機能します。これを適切に行う方法を参照するチュートリアルまたはコードを検索しましたが、うまくいきませんでした。

コレクションの展開は次のようになります。

ここに画像の説明を入力

4

1 に答える 1

0

これは答えではありませんが、ここに 1 つ欠けているものがあります。

[gesture setDelegate:self];

スケールの負の値は意味がないと確信しています。スケールは通常、パーセンテージとして使用され、0 から 1 の間の値に正規化されます。コレクション ビューを折りたたんだり展開したりする方法を確認する必要があります。ただし、ジェスチャのスケール プロパティを使用してコレクション ビューのサイズを変更している場合は、間違った計算を修正するだけです。

ピンチ方向を決定する方法としてプロパティ値 -1 を使用している場合、それを正しく行うのは簡単なことです。

CGPoint p1 = [sender locationOfTouch:0 inView:self];
CGPoint p2 = [sender locationOfTouch:1 inView:self];
    
// Compute the new spread distance.
CGFloat xd = p1.x - p2.x;
CGFloat yd = p1.y - p2.y;
CGFloat distance = sqrt(xd*xd + yd*yd);

if (distance < previousDistance) {
// add collapse method call
} else {
// add expand method call
}

previousDistance = distance;

このサンプル コードでは、previousDistance は、新しく計算された距離との比較に使用されるグローバル変数または静的変数です。明らかに、距離が前の距離よりも大きい場合、ユーザーはコレクション ビューを拡大しようとしています (逆も同様です)。

これらのいずれにも問題がないように思われる場合は、展開メソッドと折りたたみメソッドにコードを提供してください。

于 2016-12-13T00:23:17.310 に答える