在平行四边形内部流动uitextview(iOS7)

时间:2014-01-06 16:29:57

标签: ios7 uitextview

我在分页滚动视图中有一系列uitextviews。我想让每个页面内的文本在一个倾斜的矩形(平行四边形)内流动。图像附加(我希望文本在白色轮廓内流动)。

white outline is the flow shape needed

以下代码。

for (int i = 0; i < imageArray.count; i++) {

        CGRect framee;
        framee.origin.x = self.uis_scrollView.frame.size.width * i;
        framee.origin.y = 0;
        framee.size = self.uis_scrollView.frame.size;

        UITextView *newTextView = [[UITextView alloc] initWithFrame:framee];

        UIBezierPath* rectanglePath = [UIBezierPath bezierPath];
        [rectanglePath moveToPoint: CGPointMake(652, 687)];
        [rectanglePath addLineToPoint: CGPointMake(680, 687)];
        [rectanglePath addLineToPoint: CGPointMake(746, 541)];
        [rectanglePath addLineToPoint: CGPointMake(718, 541)];
        [rectanglePath addLineToPoint: CGPointMake(652, 687)];
        [rectanglePath closePath];
        UIBezierPath * imgRect = rectanglePath;
        newTextView.textContainer.exclusionPaths = @[imgRect];

        [newTextView setBackgroundColor:[UIColor clearColor]];
        [newTextView setTextColor:[UIColor whiteColor]];
        [newTextView setFont:[UIFont systemFontOfSize:16]];
        newTextView.text = [imageArray objectAtIndex:i];
        newTextView.userInteractionEnabled = NO;
        [_uis_scrollView addSubview:newTextView];
    }

也许它只是为了流动?也许我需要在右侧'画'一个倾斜的矩形,这将限制内容?

1 个答案:

答案 0 :(得分:6)

排除路径的目的实际上只是让文本围绕它流动。您应该创建一个或多个排除路径,覆盖您不希望看到任何文本的三角形区域。请注意,这些路径必须在UITextView 的坐标系中。如果我有一个大小为{320,218}的textview,并且我想在右边切出一个三角形部分,代码将如下所示:

UIBezierPath* path = [UIBezierPath bezierPath];
[path moveToPoint: CGPointMake(320, 0)];
[path addLineToPoint: CGPointMake(320, 218)];
[path addLineToPoint: CGPointMake(210, 0)];
[path closePath];
self.textView.textContainer.exclusionPaths = @[path];

,结果如下:

screenshot of excluded triangle textview

您的问题是,您想要从每个 textView中减去超级视图坐标系中的矩形。据我所知,没有方法可以使用UIBezierPath创建任意CGRect个交叉点,因此您必须为每个textView手动计算几个UIBezierPath三角形的坐标。

为简单起见,您可以计算三角形排除路径的斜边与textView的rect之间的交点。这是一个风格化的屏幕图片,向左旋转90度:

geometry