2

サブビューが x 軸のみで拡大/縮小するように、UIScrollView でズームをピンチできるようにしたいと考えています。

UIScrollView を作成し、addSubview を使用して UIView を追加します。各 UIView には UILabel があります。配列内のこれらの UIView を保持する必要がありますか?

ズームすると、テキストのサイズが影響を受けるのではなく、各ボックスの幅だけが影響を受けます。最小ズームレベルと最大ズームレベルも必要になると思います。

Appleのガレージバンドアプリではこんなものが使われています。これを行う方法はありますか?

1.
-------------------------
|                       |
|  ------   -------  -- |
|  |  1 |   |  2  |  | 3|   < 10 UIView subclass boxes on a UIScollView,
|  |    |   |     |  |  |     with a UILabel in each UIView
|  ------   -------  -- |
|                       |
-------------------------

2.
-------------------------
|                       |
|  ----------   --------|  
|  | 1 more |   | 2     |    < During zoom-in pinch, boxes are stretched
|  |        |   |       |      in x-axis only. Label remains same font size
|  ----------   --------|      and left aligned, showing more text
|                       |
-------------------------
4

2 に答える 2

4

(2回連続で、元の前提よりもはるかに単純な答えで自分のQに答えています。質問する前に、常に別の角度から見る必要があると思います..)

ズームしたい UIView (x 軸のみ) の場合、ビューをサブクラス化し、次のメソッドを追加します。

- (void)setTransform:(CGAffineTransform)newValue;
{
    newValue.d = 1.0;
    [super setTransform:newValue];
}

もちろん、この UIView に UILabel を追加すると問題が発生します。ラベルが伸びています。したがって、答えは単純にそれを UIView に追加するのではなく、スクロール ビューに直接追加することです。次に、元の x 原点とラベルの幅を表すいくつかのフロートをプロパティとして持っている場合、スクロール ビューがズームしている間に、スクロール ビューのスケールを使用してこれらを計算できます。

-(void)scrollViewDidZoom:(UIScrollView *)scrollView
{
    float scale = self.scrollView.zoomScale;
    self.label.frame = CGRectMake(self.originalXorigin*scale, self.label.frame.origin.y, self.originalWidth*scale, self.label.frame.size.height);
}
于 2012-06-17T03:26:12.950 に答える
1

配列内のこれらの UIView を保持する必要がありますか?

これは完全に個人的な好みまたは設計上の制約による決定です。これらのビューをループで更新する必要がある場合、またはコンテンツを変更するための何らかの簡単なアクセスを提供する必要がある場合は、そうです、何らかの媒体に保存する必要があります (それが配列であるか辞書であるかは、あなたが理解する必要があります)。

最小ズームレベルと最大ズームレベルも必要になると思います。

あなたは運が悪く、通常の古いUIPinchGestureRecognizer. しかし、正直なところ、ビューの rect の条件付きチェックをコーディングするのはそれほど難しくありませんか?

Appleのガレージバンドアプリではこんなものが使われています。これを行う方法はありますか?

確かに、UIPinchGestureRecognizerオブジェクトを作成し、scaleプロパティを使用して x 係数を決定し、それを使用しCGAffineTransform()UIView.

于 2012-06-14T18:39:38.260 に答える