2012-10-09 83 views
0

我想要做的是使用UIBezierPath drawRectWithRounderCorners方法在視圖周圍畫一個框架。所以我決定做的是從繪製矩形方法中取出矩形,應用一個具有負值的UIEdgesInset對象並嘗試像這樣繪製它。到目前爲止,UIBezierPath對象不是繪製rect傳遞的矩形邊界之外的繪圖。當我將同一個矩形應用於一個CALayer對象時,該圖層會根據需要進行繪製。那麼我怎麼不能讓UIBezierPath對象繪製與CALayer對象相同的矩形?爲什麼我的UIBeizerPath對象不能像我的CALayer對象那樣繪製相同的矩形邊界?

- (void)drawRect:(CGRect)rect { 
    [super drawRect:rect]; 
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect: 
       UIEdgeInsetsInsetRect(rect, UIEdgeInsetsMake(-5,-5, -5, -5)) 
      byRoundingCorners:UIRectCornerTopLeft|UIRectCornerBottomLeft 
       cornerRadii:CGSizeMake(5, 5)]; 

    [[UIColor blueColor]setFill]; 
    [[UIColor blueColor]setStroke]; 
    [path stroke]; 
    [path fill]; 

    CALayer *backGround = [CALayer layer]; 
    [backGround setOpacity:.2]; 
    [backGround setFrame:UIEdgeInsetsInsetRect(rect, 
            UIEdgeInsetsMake(-5,-5, -5, -5))]; 
    [backGround setBackgroundColor:[UIColor greenColor].CGColor]; 
    [self.layer addSublayer:backGround]; 
} 

回答

1

視圖無法在其自身範圍外繪製。這就是爲什麼你的UIBezierPath不顯示。

如果超級層的maskstoBounds屬性爲NO,則圖層可以在其超級層邊界外繪製。 masksToBounds屬性對應於視圖的clipsToBounds屬性,默認值爲NO

+0

非常感謝你的傢伙 – Esko918

相關問題