2013-03-12 40 views
1

我有一個UIView派生的視圖,只繪製一次從未更新UIView setNeedsDisplay沒有效果?

調用[self setNeedsDisplay]不起作用。什麼會造成這種情況?

不要緊繪圖代碼是否處於

  • drawRect:,或
  • drawLayer:inContext:(具有限定的空的drawRect())

如果drawLayer:未定義inContext的,然後調用drawRect。但只有一次(佈局過程中)。

- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx { 
    // drawing occurs, but just once (during view layout) 
} 

`- (void)drawRect:(CGRect) rect { 
    // empty -- never called 
} 

什麼,我已經嘗試了小清單:

  • [自我setNeedsDisplay]
  • [self.layer setNeedsDisplay]
  • [self.mySubLayer setNeedsDisplay]
  • 自我。 contentMode = UIViewContentModeRedraw;
  • 手動創建,而不是從一個筆尖加載它(無效果)
  • 卸下使用層(子層和),並使用剛剛drawRect中(無效果)的圖,
+1

你確定setNeedsDisplay被調用嗎?顯示該代碼,設置一個斷點,並指出它發生的位置,然後回報... – 2013-03-12 01:48:45

+1

要跟進Cubs的評論,你確定你在主線程上調用UIKit方法嗎?如果你不這樣做,可能會有一些古怪的後果,比如沒有任何事情發生。 – 2013-03-12 01:56:59

+0

是的,我設置了斷點。好點子。絕對肯定。花了幾個小時在這個,閱讀所有帖子,我可以找到並仔細檢查一切。即使實例與由nib初始化並推入IBOutput(地址不變)的實例相同。有很多變量,所以我把所有的東西都轉換成不使用CALayer,但這沒什麼區別,所以我把它放回去了。這對iOS框架來說很奇怪...... – StuWeldon 2013-03-12 02:00:19

回答

5

因此,這可以是標記爲回答:一定要在主線程上調用UIKit方法。

+1

具體來說,使用這個:'[self performSelectorOnMainThread:@selector(setNeedsDisplay)withObject:self waitUntilDone:TRUE];' – StuWeldon 2013-03-12 02:29:08