2012-04-18 3 views
3

Я пытаюсь сделать только пользовательские части UIImage (то есть: я хотел бы раскрыть ту часть UIImage прикосновений пользователя), и я имею разумные результаты при использовании mask имущество layer.IOS: Рисование только части из UImage

Нечто подобное на моем UIView:

UIBezierPath *maskPath = [UIBezierPath bezierPath]; 
[maskPath setLineWidth:10.0]; 
[maskPath moveToPoint:CGPointMake(10.0, 10.0)]; 
[maskPath addLineToPoint:CGPointMake(100.0, 100.0)]; 
CAShapeLayer *shapeMaskLayer = [CAShapeLayer layer]; 
shapeMaskLayer.path = maskPath.CGPath; 
[self.layer setMask:shapeMaskLayer]; 

Затем на drawRect:

- (void)drawRect:(CGRect)rect 
{ 
    [img drawInRect:rect]; 
} 

Он работает. Я просто вижу часть изображения, определяемую maskPath.

Однако, не кажется, что это лучший способ приблизиться к этой проблеме. Поэтому мой вопрос: Каким будет лучший способ рисовать только пользовательскую часть (может быть любой формы) изображения в SDK для iOS?.

ответ

4

Одна вещь, которую вы могли бы попробовать, - это просто обрезание вместо создания дополнительного слоя. например

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 

    UIBezierPath *maskPath = [UIBezierPath bezierPath]; 
    [maskPath setLineWidth:10.0]; 
    [maskPath moveToPoint:CGPointMake(10.0, 10.0)]; 
    [maskPath addLineToPoint:CGPointMake(100.0, 100.0)]; 

    CGContextAddPath(ctx, maskPath.CGPath); 
    CGContextClip(ctx) 
    [img drawInRect:rect]; 
} 
Смежные вопросы