2013-02-18 71 views
10

我有一個UIView,我想繪製一個延伸過UIView框架的圓形, 我已經將masksToBounds設置爲NO - 期待我可以通過UIView的邊界繪製過去右側和底部5個像素。在UIView之外繪製

我希望橢圓不會被剪斷,但它確實被剪斷並且不會超出邊界?

- (void)drawRect:(CGRect)rect 
{ 

    int width = self.bounds.size.width; 
    int height = self.bounds.size.height; 
    self.layer.masksToBounds = NO; 

    //// Rounded Rectangle Drawing 
    //// Oval Drawing 
    UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(0, 0, width+5, height+5)]; 
    [[UIColor magentaColor] setFill]; 
    [ovalPath fill]; 
    [[UIColor blackColor] setStroke]; 
    ovalPath.lineWidth = 1; 
    [ovalPath stroke]; 

} 

enter image description here

回答

18

http://developer.apple.com/library/ios/#documentation/general/conceptual/Devpedia-CocoaApp/DrawingModel.html

的UIView和的NSView其drawRect中之前自動配置 視圖的繪圖環境:被調用方法。 (在AppKit框架中,配置繪圖環境的 稱爲鎖定焦點。)作爲此配置的部分 ,視圖類爲當前繪圖環境創建圖形上下文。

該圖形上下文是一個石英對象(CGContext上),其中包含繪圖系統需要 信息,如適用, 繪製模式(中風或填充)的顏色,線的寬度和樣式信息, 字體信息,和合成選項。 (在AppKit中,NSGraphicsContext類的對象 包裝了一個CGContext對象。)圖形 上下文對象與窗口,位圖,PDF文件或其他輸出設備相關聯,並維護有關 圖形當前狀態的信息該實體的環境。視圖使用與視圖的窗口相關聯的上下文繪製。 有關視圖,圖形 上下文將默認剪貼區域設置爲與視圖的邊界一致,並將默認繪圖原點放置在視圖的邊界的原點處。

一旦剪輯區域設置,你只能把它縮小。所以,你試圖做的事情在UIView drawRect中是不可能的。

0

我不能肯定這將解決你的問題,但它的東西看看。您每輸入一次drawRect就會設置self.layer.masksToBounds = NO。你應該嘗試在init方法中設置一次,而不是A),因爲它不需要多次執行,B)因爲在調用drawRect之後可能會出現問題 - 誰知道。

+0

我試過 - 沒有工作... – OneGuyInDc 2013-02-18 23:24:39

+0

self.layer.masksToBounds = NO不會幫助剪輯 – pixelrevision 2015-02-17 23:34:48