具有非规则形状的NSTextContainer示例?

Ser*_*nce 8 cocoa-touch uitextview ios textkit

嗨,我正在使用TextKitiOS7 的新API,我正在尝试生成一个UITextView不规则的形状.到目前为止,我在视图控制器中:

-(void) loadView
{
    self.view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,548)];

    NSTextStorage *textStorage = [[NSTextStorage alloc] init];

    NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
    [textStorage addLayoutManager: layoutManager];

    BaseTextContainer *textContainer = [[BaseTextContainer alloc] initWithSize:CGSizeMake(100, 100)];
    [layoutManager addTextContainer: textContainer];

    BaseTextView *textView = [[BaseTextView alloc] initWithFrame:CGRectMake(110,124, 100, 100) textContainer:textContainer];
    textView.backgroundColor = [UIColor blueColor];
    textView.editable = YES;
    [self.view addSubview:textView];
}
Run Code Online (Sandbox Code Playgroud)

然后在我的子类中NSTextContainer,我想mutablePath绘制一个文本容器的形状,但不知道如何实现这一点.我有:

- (BOOL) isSimpleRectangularTextContainer
{
    return NO;
}

- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    NSLog(@"TEST");
    CGContextRef context = ctx;
    CGSize layerSize = layer.frame.size;

    CGAffineTransform transform = CGAffineTransformMakeScale(layerSize.width / self.initialSize.width, layerSize.height / self.initialSize.height);
    CGMutablePathRef newGraphicMutablePath = CGPathCreateMutableCopyByTransformingPath(self.mutablePath, &transform);
    CGContextAddPath(context, newGraphicMutablePath);

    CGPathRelease(newGraphicMutablePath);
    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
    CGContextDrawPath(context, kCGPathFill);
}
Run Code Online (Sandbox Code Playgroud)

对于如何使其工作有点困惑.我找不到任何NSTextContainer形状不规则的例子.

mat*_*att 13

不需要构建Text Kit堆栈的所有代码,因为您没有修改堆栈的体系结构.只需从普通的UITextView开始 - 让我们说它是self.textView- 然后将一个或多个UIBezierPath对象分配给它的排除路径:

self.tv.textContainer.exclusionPaths = myArrayOfBezierPaths;
Run Code Online (Sandbox Code Playgroud)

这些路径是排除路径,因此对于椭圆,您将需要创建四条路径,每条路径描述文本容器的一角.

或者,您可以自己构建Text Kit堆栈,以便插入自己的文本容器子类,并通过覆盖修改允许文本的位置lineFragmentForProposedRect:,可能类似于我在此处执行的操作:https://github.com/mattneub/编程-IOS-书本实例/斑点/主/ bk2ch10p537exclusionPath2/ch23p813textKitShapes/MyTextContainer.swift

一些实验:

在此输入图像描述

在此输入图像描述