How Can I Draw Image with Text Wrapping on iOS?

后端 未结 3 657
长发绾君心
长发绾君心 2020-12-01 12:58

I want to draw text just like the following style -- the image is always on the top right corner, and the text is around the image.

相关标签:
3条回答
  • 2020-12-01 13:20

    Yes, CoreText is the best way to do this. The code to do it is a little long to post here. Some code that may point you in the right direction is in the article "Clipping a CGRect to a CGPath." If the process for doing it is still confusing, ping me and I finally write the blog post I've been meaning to write on the subject.

    0 讨论(0)
  • 2020-12-01 13:20

    Similar problem. I solved it by creating my text-with-graphics document in HTML using standard markup tags, added the html and pngs to my project, and displayed it using a UIWebView. :-)

    0 讨论(0)
  • 2020-12-01 13:26

    Step 1 : Create an object inherited from UIView

    Step 2 : Override - (void)drawRect:(CGRect)rect method

    Step 3 : Add Following code to this method

    /* Define some defaults */
    float padding = 10.0f;
    
    /* Get the graphics context for drawing */
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    /* Core Text Coordinate System is OSX style */
    CGContextSetTextMatrix(ctx, CGAffineTransformIdentity);
    CGContextTranslateCTM(ctx, 0, self.bounds.size.height);
    CGContextScaleCTM(ctx, 1.0, -1.0);
    CGRect textRect = CGRectMake(padding, padding, self.frame.size.width - padding*2, self.frame.size.height - padding*2);
    
    /* Create a path to draw in and add our text path */
    CGMutablePathRef pathToRenderIn = CGPathCreateMutable();
    CGPathAddRect(pathToRenderIn, NULL, textRect);
    
    /* Add a image path to clip around, region where you want to place image */ 
    CGRect clipRect = CGRectMake(padding,  self.frame.size.height-50, 50, 40);
    CGPathAddRect(pathToRenderIn, NULL, clipRect);
    
    /* Build up an attributed string with the correct font */
    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:self.Text];
    
    //setFont
     CTFontRef font = CTFontCreateWithName((CFStringRef) [UIFont systemFontOfSize:10].fontName, [UIFont systemFontOfSize:10].lineHeight, NULL);
    CFAttributedStringSetAttribute(( CFMutableAttributedStringRef) attrString, CFRangeMake(0, attrString.length), kCTFontAttributeName,font);
    
    //set text color
     CGColorRef _white=[UIColor whiteColor].CGColor;
    CFAttributedStringSetAttribute(( CFMutableAttributedStringRef)(attrString), CFRangeMake(0, attrString.length),kCTForegroundColorAttributeName, _white);
    
    /* Get a framesetter to draw the actual text */
    CTFramesetterRef fs = CTFramesetterCreateWithAttributedString(( CFAttributedStringRef) attrString);
    CTFrameRef frame = CTFramesetterCreateFrame(fs, CFRangeMake(0, attrString.length), pathToRenderIn, NULL);
    
    /* Draw the text */
    CTFrameDraw(frame, ctx);
    
    /* Release the stuff we used */
    CFRelease(frame);
    CFRelease(pathToRenderIn);
    CFRelease(fs);
    

    Step 4 : Use as follows;

    TextLayoutView *TextWrappingImage=[[TextLayoutView alloc] init...your own constructor...];
    
     TextWrappingImage.backgroundColor=[UIColor clearColor];
    
     [cell addSubview:TextWrappingImage]; //Add as subview where you want
    
    0 讨论(0)
提交回复
热议问题