嗨,我正在使用iOS7的新TextKit API,我正在尝试生成一个不规则形状的UITextView.到目前为止,我在视图控制器中:
-(void) loadView { self.view = [[UIView alloc] initWithFrame:CGRectMake(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]; }
然后在我的子类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); }
对于如何使其工作有点困惑.我找不到具有不规则形状的NSTextContainer的任何示例.
解决方法
不需要构建Text Kit堆栈的所有代码,因为您没有修改堆栈的体系结构.刚开始使用普通的UITextView – 假设它是self.textView – 然后将一个或多个UIBezierPath对象分配给它的排除路径:
self.tv.textContainer.exclusionPaths = myArrayOfBezierPaths;
这些路径是排除路径,因此对于椭圆,您将需要创建四条路径,每条路径描述文本容器的一个角.
或者,您可以自己构建Text Kit堆栈,以便插入自己的文本容器子类,并通过重写lineFragmentForProposedRect:来修改允许文本的位置,也许类似于我在此处执行的操作:https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch10p537exclusionPath2/ch23p813textKitShapes/MyTextContainer.swift
一些实验:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。