2015-08-31 2 views
0

У меня есть изображение, над которым я выделяю прозрачный прямоугольник, используя слой и маску. Я хотел бы этот прозрачный прямоугольник быть красным граничным. Но я мог бы найти способ для достижения этой цели:Как добавить границу к этому разделительному слою?

Вот что я сделал:

enter image description here

Мои ViewController имеет свойство darkenedView.

- (void)loadView { 
    UIView *const rootView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)]; 
    rootView.backgroundColor = [UIColor whiteColor]; 
    self.view = rootView; 
    [self addContentSubviews]; 
} 

- (void)addContentSubviews { 
    UIImageView *const imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"DSC_0823.jpg"]]; 
    imageView.contentMode = UIViewContentModeScaleAspectFill; 
    imageView.frame = self.view.bounds; 
    imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
    [self.view addSubview:imageView]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self addDarkenedSubview]; 
} 

- (void)viewDidLayoutSubviews { 
    CGRect const bounds = self.view.bounds; 
    darkenedView.center = CGPointMake(CGRectGetMidX(bounds), 0); 
} 

- (void)addDarkenedSubview { 
    darkenedView = [[UIView alloc] initWithFrame:CGRectMake(10, 30, 400, 1200)]; 
    darkenedView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.6]; 
    darkenedView.autoresizingMask = 0; 
    [self.view addSubview:darkenedView]; 
    [self addMaskToDarkenedView]; 
} 

- (void)addMaskToDarkenedView { 
    CGRect bounds = darkenedView.bounds; 
    CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
    maskLayer.frame = bounds; 

    CGRect const myRect = CGRectMake(CGRectGetMidX(bounds) - 100, 
     CGRectGetMidY(bounds) + 100, 
     200, 200); 
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:myRect]; 
    [path appendPath:[UIBezierPath bezierPathWithRect:bounds]]; 
    maskLayer.path = path.CGPath; 
    maskLayer.fillRule = kCAFillRuleEvenOdd; 
    darkenedView.layer.mask = maskLayer; 

} 

Я пытался без успеха:

maskLayer.strokeColor = [UIColor redColor].CGColor; 
maskLayer.lineWidth = 3.0f; 
+0

либо добавить подслой для подзаголовка в «darkenedView», который имеет прямой 'CGRectMake (CGRectGetMidX (bounds) - 100, CGRectGetMidY (bounds) + 100, 200, 200)' –

ответ

2

Вместо того чтобы дать обводку объекта maskLayer создать CAShapeLayer и addSublayer с точки зрения darkenedView ниже пример кода Надеюсь, что это поможет

CAShapeLayer *shape = [CAShapeLayer layer]; 
shape.frame = darkenedView.bounds; 
shape.path = path.CGPath; 
shape.lineWidth = 3.0f; 
shape.strokeColor = [UIColor redColor].CGColor; 
shape.fillColor = [UIColor clearColor].CGColor; 
[darkenedView.layer addSublayer:shape]; 
+0

Спасибо большое, он работает. – Reveclair

+0

Добро пожаловать и спасибо, что приняли ответ @Reveclair ...! –

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