2012-09-23 100 views
17

我認爲從OS X的某些觀點來看,對於iOS而言,這些內容可能會出現在視圖邊界之外? (對於UIView的)但是,如果我創建了一個全新的單一視圖的應用程序,並創建了子類的UIView一個MyView的類,並實現其的drawRect:在iOS上,drawRect無法在視圖邊界之外繪製?

- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
    UIBezierPath *path = [UIBezierPath bezierPathWithRect: 
              CGRectMake(-20, -20, 600, 600)]; 
    [[UIColor greenColor] set]; 
    [path fill]; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetFillColorWithColor(context, [[UIColor blueColor] CGColor]); 
    CGContextFillRect(context, CGRectMake(-20, -20, 600, 600)); 
} 

我同時使用的用戶界面和CG繪製一個矩形各,只是在案件一方有效,另一方不起訴。而該視圖viewDidAppear補充說:

- (void)viewDidAppear:(BOOL)animated { 
    MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(20, 20, 260, 260)]; 
    [self.view addSubview:myView]; 
} 

但無論怎樣,彩色框不會超越(20, 20, 260, 260)區域。確實只有CALayers可以自由添加並出現在視圖範圍之外?是否因爲圖形上下文僅限於此(20, 20, 260, 260)開頭?如果是這樣,有沒有辦法讓drawRect內容出現在視圖邊界以外的所有四個頂部,下部,左側,右側?

+0

我可以問一下,爲什麼你想在可見矩形的外面畫,因爲它不可見?如果您計劃在稍後顯示它,則應正確提及CALayer。 – Lefteris

+0

其中一個原因是,我正在考慮實現具有圓角的PopoutScrollView,甚至是「像雲一樣的邊緣」。我發現我可以繼承UIView並擁有一個UIScrollView作爲屬性,所以scrollview是視圖的子視圖,而且我實際上必須重寫'addSubview'來添加到'self.scrollView'。這是因爲我不能簡單地在scrollView上繪製邊框,否則它們會滾動。這可能會很複雜,我想,爲什麼不只是UIScrollView的子類,並在drawRect中繪製邊界外?那麼我不必重寫這麼多方法。 –

+0

儘管我還沒有嘗試過這個,但我沒有看到這種不工作的原因,通過scrollview.layer.cornerRadius屬性添加圓角到scrollview,應該爲你做到這一點。 此外,如果你打算修改一個scrollView,你應該繼承scrollview和它的drawRect方法,而不是一個UIView – Lefteris

回答

0

試試這一個觀點,在這裏您已經添加了滾動:

self.scrollView.backgroundColor = [UIColor darkGrayColor]; 
self.scrollView.layer.cornerRadius = 10.0f; 
self.scrollView.layer.masksToBounds = YES; 

它應該顯示帶圓角的灰色滾動視圖,只要你想。

記住,你需要導入QuartzCore FrameWork的

+0

如果需要跳出界限,該怎麼辦? –

+0

我不明白問題 – Lefteris

+0

我的意思是,上面的代碼將在視圖的邊界內繪製背景。如果我們需要繪製頂部上方10像素,左邊界左側10個像素等等(繪製一些東西,或者繪製背景和圓角) –

20

你的問題是,「drawRect中」自動裁剪到你是在圖紙視圖。

而不是在視圖本身做繪圖,向第一個視圖添加第二個(子)視圖,即在第一個視圖的範圍之外。這將允許您進行繪製,這取決於第一個視圖的位置,但位於第一個視圖的邊界之外。

希望這會有所幫助。