19

に回転変換を適用し、UITextView内側をクリックして編集を開始すると、コンテンツのサイズが自動的に拡大されているように見えます。コンテンツ ビューの新しい幅は、回転したビューの境界ボックスの幅です。たとえば、幅 500、高さ 400 のテキスト ボックスを 30 度回転させた場合、新しいコンテンツの幅は次のようになります。

(500 * cos(30)) + (400 * sin(30)) = 633

またはグラフィカルに:

ここに画像の説明を入力

興味深いことに、既にテキスト ビューを編集してから変換を適用すると、コンテンツ サイズに変更が加えられていないように見えます。そのため、テキスト編集の開始前後で、テキスト ビューはそのframeプロパティを参照し、フレーム幅に基づいてコンテンツ サイズを調整するようです。これに対する解決策は、bounds代わりにプロパティを使用するように指示することだと思いますが、テキストビューがコンテンツサイズを変更することを決定している場所が正確にわからないため、どこでこれを行うべきかわかりません。

私はグーグルで検索しましたが、変換された UITextViews を使用するための参照が見つからないようです。これについて何か考えがある人はいますか?

EDIT(テストプロジェクトからのボタンアクション):

- (IBAction)rotateButtonTapped:(id)sender {
    if (CGAffineTransformIsIdentity(self.textView.transform)) {
        self.textView.transform = CGAffineTransformMakeRotation(30.0 * M_PI / 180.0);
    }
    else {
        self.textView.transform = CGAffineTransformIdentity;
    }

    NSLog(@"contentsize: %.0f, %.0f", textView.contentSize.width, textView.contentSize.height);
}
4

2 に答える 2

24

私もこの問題で立ち往生していました。

私が見つけた唯一の解決策は、UIViewのインスタンスを作成し、UITextViewをサブビューとして追加することでした。次に、UIViewのインスタンスを回転させることができ、UITextViewは問題なく機能します。

UITextView *myTextView = [[UITextView alloc] init];
[myTextView setFrame:CGRectMake(0, 0, 100, 100)];

UIView *myRotateView = [[UIView alloc] init];
[myRotateView setFrame:CGRectMake(20, 20, 100, 100)];
[myRotateView setBackgroundColor:[UIColor clearColor]];
[myRotateView addSubview:myTextView];

myRotateView.transform = CGAffineTransformMakeRotation(0.8);
[[self view] addSubview:myRotateView];
于 2012-02-08T15:21:17.807 に答える
1

ビューで変換するのではなく、レイヤー変換を実行して回転を適用しようとしましたか?

#import <QuartzCore/QuartzCore.h>

mytextField.layer.transform = CATransform3DMakeRotation (angle, 0, 0, 1);

これは、コア テキスト フィールド コード内に存在する壊れたロジックをだますのに十分な場合があります。

于 2011-09-23T05:20:51.823 に答える