2016-01-12 6 views
1

enter image description hereКак найти неизолированную площадь uibeizerpath?

Этот greycolour является UIImageView, а шрифт белого цвета - изображение.

Это изображение, размещенное внутри UIImageView.

Мне нравится цвет только внутри шрифта, а не целое UIImageview для этого, я собираюсь выяснить координаты изображения.

Я новичок в этом виде концепции, так что любезно один из них подскажет мне, как цвет только внутри изображения, есть еще 50 изображений, оно не является статичным, поэтому дайте некоторую хорошую идею.

Это код, я использую, чтобы рисовать внутри UIImageView:

-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 

    UITouch *touch = [[event allTouches] anyObject]; 
    touchPoint = [touch locationInView:self.imgColor]; 

     UIBezierPath *path = [UIBezierPath bezierPath]; 
     [path moveToPoint:CGPointMake(touchPoint.x,touchPoint.y)]; 
     [path addLineToPoint:CGPointMake(startingPoint.x,startingPoint.y)]; 


     startingPoint=touchPoint; 
     CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
     shapeLayer.path = [path CGPath]; 
     shapeLayer.strokeColor = [[UIColor blueColor] CGColor]; 
     shapeLayer.lineWidth = 3.0; 
     shapeLayer.fillColor = [[UIColor redColor] CGColor]; 
     [self.imgColor.layer addSublayer:shapeLayer]; 
     [arrLayer addObject:shapeLayer]; 

    NSLog(@"Touch moving point =x : %f Touch moving point =y : %f", touchPoint.x, touchPoint.y); 



} 

ответ

4

Используйте этот обычай вид UIImage: Screenshot of working code

CustomView.h

@interface CustomView : UIImageView 

@end 

CustomView.m

@interface CustomView() 
{ 
    CGPoint touchPoint,startingPoint; 
    UIView *drawingView; 
} 

@end 


@implementation CustomView 

-(void)awakeFromNib 
{ 
    drawingView = [[UIView alloc] initWithFrame:self.bounds]; 
    drawingView.backgroundColor = [UIColor clearColor]; 
    [self addSubview:drawingView]; 
    [self updateMask]; 
} 

- (void)updateMask 
{ 
    CALayer *maskLayer = [CALayer layer]; 
    maskLayer.geometryFlipped = YES; 
    maskLayer.contents = (id)self.image.CGImage; 
    switch (self.contentMode) 
    { 
     case UIViewContentModeScaleToFill: 
      maskLayer.contentsGravity = kCAGravityResize; 
      break; 
     case UIViewContentModeScaleAspectFit: 
      maskLayer.contentsGravity = kCAGravityResizeAspect; 
      break; 
     case UIViewContentModeScaleAspectFill: 
      maskLayer.contentsGravity = kCAGravityResizeAspectFill; 
      break; 
     case UIViewContentModeCenter: 
      maskLayer.contentsGravity = kCAGravityCenter; 
      break; 
     case UIViewContentModeTop: 
      maskLayer.contentsGravity = kCAGravityTop; 
      break; 
     case UIViewContentModeBottom: 
      maskLayer.contentsGravity = kCAGravityBottom; 
      break; 
     case UIViewContentModeLeft: 
      maskLayer.contentsGravity = kCAGravityLeft; 
      break; 
     case UIViewContentModeRight: 
      maskLayer.contentsGravity = kCAGravityRight; 
      break; 
     case UIViewContentModeTopLeft: 
      maskLayer.contentsGravity = kCAGravityTopLeft; 
      break; 
     case UIViewContentModeTopRight: 
      maskLayer.contentsGravity = kCAGravityTopRight; 
      break; 
     case UIViewContentModeBottomLeft: 
      maskLayer.contentsGravity = kCAGravityBottomLeft; 
      break; 
     case UIViewContentModeBottomRight: 
      maskLayer.contentsGravity = kCAGravityBottomRight; 
      break; 
     default: 
      break; 
    } 
    maskLayer.frame = drawingView.bounds; 
    drawingView.layer.mask = maskLayer; 
} 


- (void)setImage:(UIImage *)image 
{ 
    [super setImage:image]; 
    [self updateMask]; 
} 

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    drawingView.frame = self.bounds; 
    drawingView.layer.mask.frame = drawingView.bounds; 
} 


-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    touchPoint = [touch locationInView:self]; 

    if (!CGPointEqualToPoint(startingPoint, CGPointZero)) 
    { 
     UIBezierPath *path = [UIBezierPath bezierPath]; 
     [path moveToPoint:CGPointMake(touchPoint.x,touchPoint.y)]; 
     [path addLineToPoint:CGPointMake(startingPoint.x,startingPoint.y)]; 

     CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
     shapeLayer.path = [path CGPath]; 
     shapeLayer.strokeColor = [[UIColor blueColor] CGColor]; 
     shapeLayer.lineWidth = 3.0; 
     shapeLayer.fillColor = [[UIColor redColor] CGColor]; 
     [drawingView.layer addSublayer:shapeLayer]; 
    } 
    startingPoint=touchPoint; 

// [arrLayer addObject:shapeLayer]; 
    NSLog(@"Touch moving point =x : %f Touch moving point =y : %f", touchPoint.x, touchPoint.y); 
} 

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event; 
{ 
    startingPoint = CGPointZero; 
} 


@end 
+0

ваш код работает, если я даю статическое изображение, как передать изображение с контроллера просмотра в customclass bro? –

+0

Обновленный код, теперь вы можете установить любое изображение. –

+0

вы качаете брата, и мне нравится знать, что происходит в этом коде, поэтому, если возможно, пришлите мне примечания об этом [email protected] или, пожалуйста, обновите ответ с объяснением :) –

Смежные вопросы