在Textview中添加轮播视图

时间:2016-05-04 11:14:47

标签: ios objective-c uitextview icarousel nstextattachment

我将数据添加到TextViewsqlite database。在我通过NSTextAttachment完成的一些Para或Line数据之后,我有大约30到35个图像要添加到其中。现在我想要做的是,在Carousel View中我希望它有更多的2个图像,在它之后的剩余数据。看看我的代码。我尝试了不同的方式,但没有取得成功。任何帮助都感激不尽。

NSTextAttachment *textAttachment1 = [[NSTextAttachment alloc] init];
    textAttachment1.image = [UIImage imageNamed:@"img1.png"];
    NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
    textAttachment.image = [UIImage imageNamed:@"img2.png"];
    NSTextAttachment *textAttachment2 = [[NSTextAttachment alloc] init];
    textAttachment2.image = [UIImage imageNamed:@"img3.png"];
    NSTextAttachment *textAttachment3 = [[NSTextAttachment alloc] init];

    CGFloat oldWidth1 = textAttachment1.image.size.width;
    CGFloat oldWidth = textAttachment.image.size.width;
    CGFloat oldWidth2 = textAttachment2.image.size.width;

    CGFloat scaleFactor1 = oldWidth1 / (self.textViewResearch.frame.size.width + 70);
    CGFloat scaleFactor = oldWidth / (self.textViewResearch.frame.size.width + 70);
    CGFloat scaleFactor2 = oldWidth2 / (self.textViewResearch.frame.size.width + 70);

    textAttachment1.image = [UIImage imageWithCGImage:textAttachment1.image.CGImage scale:scaleFactor1 orientation:UIImageOrientationUp];
    textAttachment.image = [UIImage imageWithCGImage:textAttachment.image.CGImage scale:scaleFactor orientation:UIImageOrientationUp];
    textAttachment2.image = [UIImage imageWithCGImage:textAttachment2.image.CGImage scale:scaleFactor2 orientation:UIImageOrientationUp];

    NSAttributedString *attrStringWithImage1 = [NSAttributedString attributedStringWithAttachment:textAttachment1];
    NSAttributedString *attrStringWithImage = [NSAttributedString attributedStringWithAttachment:textAttachment];
    NSAttributedString *attrStringWithImage2 = [NSAttributedString attributedStringWithAttachment:textAttachment2];

    [attributedString replaceCharactersInRange:NSMakeRange(0, 0) withAttributedString:attrStringWithImage1];
    [attributedString replaceCharactersInRange:NSMakeRange(13740, 0) withAttributedString:attrStringWithImage];
    [attributedString replaceCharactersInRange:NSMakeRange(13741, 0) withAttributedString:attrStringWithImage2];

     self.textView.attributedText = attributedString;

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望将图像放在文本视图中,让文本在其周围流动。拥有2个以上的图像,你想要一个轮播,一个类iCarousel的实例。

UITextView的实例中包含子视图并让文本在其周围浮动是一项已知任务。最简单的方法似乎是使用文本容器的排除路径,如下所示:

// Get the dimension of the subview
iCarousel *subview = …; 
UIBezierPath *subviewPath = [UIBezierPath bezierPathWithRect:subview.frame];

// Somewhere you should add it 
UITextView *textView = …; // Wherever it comes from
[textView addSubview:subview];

// Let the text flow around it
UITextContainer *textContainer = textView.textContainer; // The text container is the region text is laid out in. 
textContainer.exclusionPaths = [subviewPath]; // Do not lay out in this region.

当然,只要子视图的框架发生变化,您就必须更改排除区域。

更灵活,更复杂的方法是自己进行文本布局。如果上述方法不起作用,请告诉我。我将为此添加代码。