Kiedy masz coś takiego:
+(UITextView *)textView:(UITextView *)textView withCuttedRect:(CGRect)r {
}
rzeczywiście może po prostu dostępu Warstwa TextView jest z animacją rdzenia z
textView.layer
Co wtedy można by się ustawić maskę odcinania. Te maski działają w następujący sposób: generalnie rysujesz czarny kształt, który pozostaje taki sam, reszta zostanie obcięta (ok, możesz nawet zrobić kilka rzeczy na kanale alfa, ale z grubsza to jest to).
Potrzebujesz czarnego prostokąta jako maski, z prostokąta w prostokącie, który jest wolny. dla których można w przybliżeniu zrobić
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;
Powyższy kod jest również nieużywane przez Crop a CAShapeLayer retrieving the external path
Pomysł dlatego, że wypełnienie działa w ten sposób jest ładnie wyjaśnione w Quartz 2D Programming Guide w sekcji „Wypełnianie ścieżki”
Może Powinienem użyć quartzcore i to jest metoda 'setBackground' filters? – user1385666