0

NSAttributedStringの読み取り中にviewControllerの配列を生成するこのコードがあります。最初のサイクルの後、CTFrameGetVisibleStringRange() 関数は、表示するテキストがさらにある場合でも 0 を返します。

- (void)buildFrames
{
/*here we do some setup - define the x & y offsets and create an empty frames array */
    float frameXOffset = 20; 
    float frameYOffset = 20;

    self.frames = [NSMutableArray array];

    //buildFrames continues by creating a path and a frame for the view's bounds (offset slightly so we have a margin).
    CGMutablePathRef path = CGPathCreateMutable(); 
    // create an insect rect for drawing
    CGRect textFrame = CGRectInset(self.bounds, frameXOffset, frameYOffset); 
    CGPathAddRect(path, NULL, textFrame );// add it to the path

    // Create a frame setter with my attributed String
    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attributedString);

    //This section declares textPos, which will hold the current position in the text. 
    //It also declares columnIndex, which will count how many columns are already created.
    int textPos = 0; 
    int columnIndex = 0;

    while (textPos < [attributedString length]) { 
        //The while loop here runs until we've reached the end of the text. Inside the loop we create a column bounds: colRect is a CGRect which depending on columnIndex holds the origin and size of the current column. Note that we are building columns continuously to the right (not across and then down).

        CGPoint colOffset = CGPointMake(frameXOffset , frameYOffset);
        CGRect columnRect = CGRectMake(0, 0 , textFrame.size.width, textFrame.size.height);

        CGMutablePathRef path = CGPathCreateMutable();
        CGPathAddRect(path, NULL, colRect);

        CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(textPos, 0), path, NULL);
        CFRange frameRange = CTFrameGetVisibleStringRange(frame); 

       // MY CUSTOM UIVIEW
        LSCTView* content = [[[LSCTView alloc] initWithFrame: CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)] autorelease];
        content.backgroundColor = [UIColor clearColor];
        content.frame = CGRectMake(colOffset.x, colOffset.y, columnRect.size.width, columnRect.size.height) ;

    /************* CREATE A NEW VIEW CONTROLLER WITH view=content *********************/

        textPos += frameRange.length;

        CFRelease(path);

        columnIndex++;
     }
}
4

1 に答える 1

0

attributedString の配置を変更しましたか? 私はこの同じ問題を抱えており、テキストの配置が kCTJustifiedTextAlignment に設定されている場合に発生することがわかりました。残りのタイプでは問題なく動作するはずです。

于 2012-05-29T20:22:56.863 に答える