2012-10-04 79 views
0

我已經看到了這個問題之前發佈的,但我無法找到答案..setNeedsDisplay並不總是調用的drawRect

正如預期的那樣,得到的drawRect稱爲程序啓動時自動運行。然而,當我打電話[自我setNeedsDisplay]的drawRect沒有得到再利用也許是自己不正確調用,我不明白爲什麼...

//DrawView.m

[self setNeedsDisplay]; 

-(void)drawRect:(CGRect)rect{ 

NSLog(@ "Called_1"); 

//DRAW A PATH 
} 

。我也嘗試過使用DrawImage,但它仍然不起作用。

//DrawView.h

@interface DrawView : UIView { 

UIImageView *drawImage; 
} 

//DrawView.m

-(id)initWithCoder:(NSCoder *)coder 
{ 
self = [super initWithCoder:coder]; 
if (self) { 
    drawImage = [[UIImageView alloc] initWithImage:nil]; 
    drawImage.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height); 
    [self addSubview:drawImage]; 
} 

return self; 
} 
+0

值除非視圖在用戶界面中可見,否則不會發送drawRect。 –

+0

好點。謝謝!我沒有看到它,因爲它發生在另一層。我有多個UIViews堆疊在一起。你知道我可以如何發送SetNeedsDisplay命令到一個特定的UIView?現在我無法控制形狀的顯示位置。歡呼聲 – jeddi

+0

您需要以某種方式構建一條路徑。你可以使用標籤屬性,然後你可以問容器[view.subviews viewWithTag:5]; –

回答

0

通常當你想有一個視圖重繪你應該叫:

[self setNeedsDisplay: YES]; 

授予我從來沒有建立在iOS上,在OSX上這個代碼每次都有效。另外,例如,如果你希望你的委託來調用一個視圖名爲someView重繪:

[someView setNeedsDisplay: YES]; 

注意:YES是OBJ-C定義的宏,僅僅是一個1

+0

[someView setNeedsDisplay](沒有:YES)可以很好地工作。非常感謝! – jeddi

+0

至少對於可可觸摸來說,方法setNeedsDisplay:(BOOL)不存在。它只是像這樣:[self.view setNeedsDisplay]。 [UIView類文檔](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/) – HotFudgeSunday

相關問題