2013-05-14 2 views
1

В App я подклассы UINavigationBar и как мой TitleView я устанавливаю (в View Controller) пользовательские UIViewЗакругленный нижний край UIView

[self.playButton setBackgroundColor:[UIColor yellowColor]]; 
[self.navigationItem setTitleView:self.playButton]; 

Нижний край этой точки зрения (playButton) должен быть изогнут. Не только углы, личинка все нижний edge.To достижение этого эффекта я использую этот код:

CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
UIBezierPath *path = [[UIBezierPath alloc] init]; 

[path addCurveToPoint:CGPointMake(self.playButton.frame.size.width, self.playButton.frame.size.height) controlPoint1:CGPointMake(0, self.playButton.frame.size.height) controlPoint2:CGPointMake(self.playButton.frame.size.width, 60)]; 
maskLayer.path = path.CGPath; 
self.playButton.layer.mask = maskLayer; 

Но после этого код моего UIView (playButton) исчез! Является ли это подходящим способом применения изогнутого нижнего края UIView?

Он должен выглядеть следующим образом: http://i.imgur.com/51UIQsE.png

+0

может быть, это то, что вы пытаетесь достичь. http://stackoverflow.com/questions/2264083/rounded-uiview-using-calayers-only-some-corners-how – m4n1c

+0

Они говорят о закруглении углов, я хочу округлить/искривить весь нижний край. – lvp

+0

Я думаю, что одна из возможных причин заключается в том, что вы забываете использовать метод movetopoint, который должен идеально существовать, если функции, которые вы используете, имеют указанные конечные точки. В методе addCurveToPoint вам нужно указать конечные точки с контрольными точками. – m4n1c

ответ

0

Решение:

-(void)roundCorners:(UIRectCorner)corner radius:(float)radius 
{ 
    _cornerRadius = radius; 
    _corner = corner; 
    [self setNeedsDisplay]; 
} 

- (void)drawRect:(CGRect)rect { 
    // Drawing code 
    [super drawRect:rect]; 

    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:_corner cornerRadii:CGSizeMake(_cornerRadius, _cornerRadius)]; 

    CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
    maskLayer.frame = self.bounds; 
    maskLayer.path = maskPath.CGPath; 

    self.layer.mask = maskLayer; 
} 
0
CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
[maskLayer setFrame:self.playButton.bounds]; 
UIBezierPath *path = [UIBezierPath bezierPath]; 

[path addArcWithCenter:CGPointMake(self.playButton.center.x, -36.0) radius:65.5 startAngle:0 endAngle:2*M_PI clockwise:YES]; 


//[path closePath]; 
maskLayer.path = path.CGPath; 
self.playButton.layer.mask = maskLayer; 
+0

К сожалению, когда я применяю эту маску, мой вид (playButton) исчезает с основного вида ... – lvp

+0

Убедитесь, что рамка кнопки воспроизведения установлена. – m4n1c

+0

Да, кадр установлен, это код. И все же моя playButton исчезает :( – lvp

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

  • Нет связанных вопросов^_^