1

UIPinchGestureRecognizerのビューの幅 (高さではない) を調整するためにを使用していUIScrollViewます。ピンチ ジェスチャのscaleプロパティで動作しますがcontentOffset、スクロール ビューの は変わらないため、ビューは常に右側に増加します。contentOffset画面の左端からビューが拡大するため、幅に合わせて拡大すると、これは少し見栄えが良くなります。

問題は、ピンチの位置が無視されることです。そのため、常にピンチが画面の左側にあるように見えます。

contentOffsetピンチポイントのコンテンツを同じ場所に保つようにオフセットを調整できるように、ピンチポイントの位置をどうにかして調整する必要があります。

注: 組み込みのUIScrollViewピンチ ズーム ジェスチャは使用できません。ズームを 1 次元の水平にしたいだけだからです。UIViewまた、 を使用する必要があるため、 で変換を使用することはできませんUIScrollView

4

1 に答える 1

2

私はグラフをピンチズームしていたので、ピンチはグラフビューの幅の制約を調整します。

ピンチ ハンドラは次のとおりです。

- (void) doPinch:(UIPinchGestureRecognizer*)pinch;
{        
    CGFloat width = self.graphWidthConstraint.constant;
    CGFloat idealWidth = 1500;
    CGFloat currentScale = width / idealWidth;
    CGFloat scale = currentScale - (1.0 - pinch.scale);

    CGFloat minScale = 0.5;
    CGFloat maxScale = 3.0;
    scale = MIN(scale, maxScale);
    scale = MAX(scale, minScale);

    CGPoint locationScrollview = [pinch locationInView:self.graphScrollView];
    CGFloat pinchXNormalized = locationScrollview.x / width;

    CGPoint locationView = [pinch locationInView:self.view];

    // resize
    CGFloat newWidth = idealWidth * scale;
    self.graphWidthConstraint.constant = newWidth;

    // set offset to position point under touch
    CGFloat pinchXScaled = newWidth * pinchXNormalized;
    CGFloat x = pinchXScaled - locationView.x;
    self.graphScrollView.contentOffset = CGPointMake(x, 0);

    pinch.scale = 1;
}
于 2015-08-06T13:08:35.413 に答える