2015-08-26 4 views
0

У меня есть пользовательский UIView, создающий линию, которая вращается вокруг своей оси.Как сохранить CAShapeLayer внутри своего родительского UIView?

lineLayer = [[CAShapeLayer alloc] init]; 

UIBezierPath *bezierPath = [UIBezierPath bezierPath]; 

CGFloat width = CGRectGetWidth(self.frame)/2.0f; 
CGFloat height = CGRectGetHeight(self.frame)/2.0f; 
CGPoint centerPoint = CGPointMake(width, height); 

CGPoint addLineToPoint = CGPointMake(width, -30); 

[bezierPath moveToPoint:centerPoint]; 
[bezierPath addLineToPoint:addLineToPoint]; 

lineLayer.strokeColor = [UIColor whiteColor].CGColor; 

lineLayer.frame = self.bounds; 
lineLayer.lineWidth = 1.0; 

lineLayer.path = bezierPath.CGPath; 

[self.layer addSublayer:lineLayer]; 

[lineLayer setHidden:YES]; 

В настоящее время этот вид установлен как РОДИТЕЛЬСКИЙ КЛАСС UIView в Раскадровке.

Когда я запускаю Project, этот linelayer отображается из его родительского слоя представления.

enter image description here

Вот на этом снимке, lineLayer выходит из своего родителя UIView-х, а также другая точка зрения родителя Просмотр в раскадровке иерархии.

Любая помощь ????

+0

Я думаю, что его из-за этого 'lineLayer.frame = self.bounds;' ваш кадр больше, изменить высоту фрейма, он должен работать. – iphonic

+0

Вы имеете в виду рамку линии Layer или View? –

+0

Да, кадр, который вы устанавливаете, имеет вид, он может быть больше, чем фактический рисунок, поэтому вместо установки 'self.bounds' вы можете попробовать изменить высоту, исходя из' self.bounds'? – iphonic

ответ

0

Заменить эту строку

CGPoint addLineToPoint = CGPointMake (ширина, -30);

с

CGPoint addLineToPoint = CGPointMake(width, -height); 
+0

Не использовать. То же самое, даже рост линии увеличился. @Shebin –

+0

Я знаю, что я сделаю его нулевым, а не -веем, он станет меньше по длине, но он не будет полезен, я хочу, чтобы большая линия была отрезана, когда линия попадает в рамки вида –

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