我有經常討論的drawRect沒有被調用。我經歷了很多帖子,但還沒有解決我的問題。setNeedsDisplay revisited
該溶液通常被描述爲調用-setNeedsDisplay
。對問題 setNeedsDisplay doesn't call drawRect的回答指示在子視圖上調用它而不是self
。
我創建了一個子視圖上繪製一個按鈕。該按鈕被選中。
- (IBAction) selected1:(id)sender {
NSLog(@"selected1");
UIButton *button = (UIButton *)sender;
[button setTitle:@"Chosen1" forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateDisabled];
// UsableMark *um = [[UsableMark alloc] init ]; // Original
// UsableMark *um = [[UsableMark alloc] initWithFrame:button.frame]; // 1st fix
CGRect umFrame = CGRectMake(0,0,button.frame.size.width,button.frame.size.height); // 2nd fix
UsableMark *um = [[UsableMark alloc] initWithFrame:umFrame ]; // 2nd fix
[button addSubview:um];
[um setNeedsDisplay];
[um release];
button.enabled = NO;
NSLog(@"finished selected1");
}
UsableMark中的drawRect調用未觸發。
用[button setNeedsDisplay]
代替[um setNeedsDisplay]
不會觸發drawRect調用。
嘗試使用self
失敗,因爲selected1方法是UIApplicaitonDelegate類型的類。 Method -setNeedsDisplay未找到。
試圖[self.window setNeedsDisplay]
給沒有取得任何進展。
直接調用drawRect中(其中一個並不想這樣做)CGRect rect = button.frame; [um drawRect:rect];
說明了本方法,記錄是活的。
分辨率可能很簡單,但它脫離了我。
你重寫了UsableMark tomset默認框架中的init方法嗎?如果不是,框架將具有零大小,並且UIKit可以跳過將其顯示爲性能操作。 – ughoavgfhw 2011-04-23 20:13:04
是否覆蓋了initWithFrame。但是使用的init沒有它。 修改了代碼以使用initWithFrame。 現在調用initWithFrame。 drawRect也是如此! – Refactor 2011-04-23 22:29:22
謝謝。 drawRect被調用。將您的評論更改爲答案,然後我會對其進行標記。現在來研究爲什麼drawRect繪圖不可見的問題。 – Refactor 2011-04-23 23:10:32