Wenn Sie so etwas wie haben würde:
+(UITextView *)textView:(UITextView *)textView withCuttedRect:(CGRect)r {
}
einfach Sie tatsächlich das Textview die Schicht aus Kern Animation Zugriff mit
textView.layer
Was Sie dann können, um eine Maske für Clipping eingestellt ist. Diese Masken funktionieren folgendermaßen: Sie zeichnen in der Regel eine schwarze Form, und das bleibt gleich, der Rest wird abgeschnitten (ok, Sie können tatsächlich auch einige Dinge auf dem Alpha-Kanal tun, aber ungefähr das ist es).
Sie brauchen also ein schwarzes Rechteck als Maske, mit einem Rechteck innerhalb des Rechtecks, das frei ist. dafür kann man etwa tun
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;
Der obige Code auch von Crop a CAShapeLayer retrieving the external path
Die Idee, warum das Füllen schön in dem Abschnitt, in Quartz 2D Programming Guide wird auf diese Weise funktioniert erklärt nicht mehr benützt wird
„einen Pfad Filling“
Vielleicht Ich sollte Quarzkern verwenden und es ist 'setBackground' Filtermethode? – user1385666