1

ドラッグジェスチャを検出するさまざまな方法をうまく理解しています(現在はを使用していますUIPanGestureRecognizer)が、変換の理解が限られているため、これが可能かどうか/どのように可能かはわかりません。基本的に、私が望んでいるのは、ユーザーが画面上の他の場所でドラッグ ジェスチャを実行するのと同じペースで(より適切な言葉がないため) UIView に適用されるスケーリング変換です。つまり、ユーザーが上にドラッグすると、変換する UIView のサイズがそのジェスチャの位置に比例して増加し、ユーザーが下にドラッグし始めると、比例して縮小し始めるはずです。

うまくいけば、それは理にかなっています。ダミーの例として、UIView のサイズをリアルタイムで変更するために調整できるスライダーを想像してみてください。この種のインクリメンタルおよび一定サイズの更新を行う良い方法はありますCGAffineTransformか?

4

2 に答える 2

3

パン ジェスチャ ハンドラーでは、単にtranslationInViewまたはを取得locationInViewし、それからスケールを計算し、それに応じて変換を更新します。例えば:

- (void)handlePan:(UIPanGestureRecognizer *)gesture
{
    static CGAffineTransform originalTransform;

    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        originalTransform = self.viewToScale.transform;
    }
    else if (gesture.state == UIGestureRecognizerStateChanged)
    {
        CGPoint translation = [gesture translationInView:gesture.view];
        CGFloat scale = 1.0 - translation.y / 160.0;
        self.viewToScale.transform = CGAffineTransformScale(originalTransform, scale, scale);
    }
}

scale正確に何をしたいのかに応じて計算をいじることができますが、うまくいけばアイデアが得られます。

個人的には、サイズ変更にはピンチ ジェスチャ レコグナイザを使用したいと思います (これは、ユーザーがトレーニングを受けている UI でscaleあり、箱から出してすぐに要素を提供するなどです)。ピンチ ジェスチャ レコグナイザーを実行すると、次のようになります。

- (void)handlePinch:(UIPinchGestureRecognizer *)gesture
{
    static CGAffineTransform originalTransform;

    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        originalTransform = self.viewToScale.transform;
    }
    else if (gesture.state == UIGestureRecognizerStateChanged)
    {
        self.viewToScale.transform = CGAffineTransformScale(originalTransform, gesture.scale, gesture.scale);
    }
}
于 2013-04-17T19:42:22.353 に答える