我有一个iPhone应用程序,我需要实现以下方法:
+(UITextView *)textView:(UITextView *) withCuttedRect:(CGRect)r
此方法必须切断(填充[UIColor clearColor]
的RECT r
从UITextView
并返回UITextView
对象。
用户将看到后面的视图UITextView
从板缺孔。
怎么做到呢?
我有一个iPhone应用程序,我需要实现以下方法:
+(UITextView *)textView:(UITextView *) withCuttedRect:(CGRect)r
此方法必须切断(填充[UIColor clearColor]
的RECT r
从UITextView
并返回UITextView
对象。
用户将看到后面的视图UITextView
从板缺孔。
怎么做到呢?
当你碰到这样的:
+(UITextView *)textView:(UITextView *)textView withCuttedRect:(CGRect)r {
}
实际上,你可以从核心动画只需访问的TextView的层
textView.layer
那么,什么你可以设置一个面具剪裁。 这些面具的工作方式如下:你一般绘制一个黑色的形状,并且保持不变,其余的将被裁剪(OK,你其实还可以做一些事情上的alpha通道,但大致就是它)。
所以你需要一个黑色的矩形作为掩模,与自由矩形内的矩形。 对,你可以做左右
CAShapeLayer *mask = [[CAShapeLayer alloc] init];
mask.frame = self.textView.layer.bounds;
CGRect biggerRect = CGRectMake(mask.frame.origin.x, mask.frame.origin.y, mask.frame.size.width, mask.frame.size.height);
CGRect smallerRect = CGRectMake(50.0f, 50.0f, 10.0f, 10.0f);
UIBezierPath *maskPath = [UIBezierPath bezierPath];
[maskPath moveToPoint:CGPointMake(CGRectGetMinX(biggerRect), CGRectGetMinY(biggerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMinX(biggerRect), CGRectGetMaxY(biggerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMaxX(biggerRect), CGRectGetMaxY(biggerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMaxX(biggerRect), CGRectGetMinY(biggerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMinX(biggerRect), CGRectGetMinY(biggerRect))];
[maskPath moveToPoint:CGPointMake(CGRectGetMinX(smallerRect), CGRectGetMinY(smallerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMinX(smallerRect), CGRectGetMaxY(smallerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMaxX(smallerRect), CGRectGetMaxY(smallerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMaxX(smallerRect), CGRectGetMinY(smallerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMinX(smallerRect), CGRectGetMinY(smallerRect))];
mask.path = maskPath.CGPath;
[mask setFillRule:kCAFillRuleEvenOdd];
mask.fillColor = [[UIColor blackColor] CGColor];
self.textView.layer.mask = mask;
上面的代码也由废弃作物一个CAShapeLayer检索外部路径
为什么填土工程这样的想法是很好的解释石英2D编程指南一节“填补了路径”