0

太字と通常のテキストを一緒に表示するために CATextLayer を使用しました。Web サービスの応答から長いテキストを取得しているため、完全なテキストを表示できません。CATextLayer オブジェクトを作成する方法を教えてください。 textviewのようにスクロール可能です。これに関する解決策を教えてください。ここからも参照していますが、うまくいきません。私はこのコードを使用しています:

/* オンデマンドでテキスト レイヤーを作成します */

if (!_textLayer) {
    _textLayer = [[CATextLayer alloc] init];
    //_textLayer.font = [UIFont boldSystemFontOfSize:13].fontName; // not needed since `string` property will be an NSAttributedString
    _textLayer.backgroundColor = [UIColor clearColor].CGColor;
    _textLayer.wrapped = YES;
    //CALayer *layer = self.navigationController.toolbar.layer; //self is a view controller contained by a navigation controller
    _textLayer.frame = CGRectMake(5,325, 310, 90);
    _textLayer.contentsScale = [[UIScreen mainScreen] scale]; // looks nice in retina displays too :)
    _textLayer.alignmentMode = kCAAlignmentJustified;
    _textLayer.masksToBounds = YES;
    [self.view.layer addSublayer:_textLayer];
}

一番下で、_textLayer を self.view.layer の代わりに UITextView のレイヤーにも追加しようとしました。

どうすればこの機能を実現できますか?

4

2 に答える 2

4

CATextLayer を UIScrollView に追加するだけで、無料でスクロールできます。必要に応じて scrollview のフレームを設定し、contentSize を CATextLayer フレームとして設定し、スクロールのレイヤーに追加します。次のようになります (実際には動作しないコード)。

UIScrollView* scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,100,100)];
CATextLayer* layer = [CATextLayer layer];
//layer init code goes here
scroll.contentSize = CGSizeMake(1000,1000);//or your actual text layer size
[scroll.layer addSublayer:layer];

これで完了です。ビューのサブビューとしてスクロールを追加することを忘れないでください。

于 2012-11-20T13:09:13.907 に答える
0

NSString のメソッドsizeWithFont:constrainedToSize:を使用して、指定されたフォントでテキストの境界四角形を取得し、このサイズを使用してレイヤーのフレームを設定します。

NSString* myString = ....;
CGSize size =     [myString sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(100, 100)];
_textlayer.frame = CGRectMake(0,0,size.width,size.height);

適切なフォント/制約サイズを使用することを忘れないでください。

于 2012-11-21T08:32:17.013 に答える