2011-10-08 97 views
6

我正準備我的iPhone應用程序發佈iOS 5 GM,並遇到了與UIView的錯誤。當我重寫子類的drawRect方法時,模擬器顯示所需的結果,但是當我嘗試在實際設備上進行測試時,drawRect覆蓋根本沒有任何效果。iOS 5 UIView drawRect覆蓋不能在設備上工作

我甚至在一個drawRect覆蓋內放置了一個日誌語句並確認它正在被調用。

有沒有其他人注意到這個問題?

下面是我使用的是超越代碼:

- (void)drawRect:(CGRect)rect { 
DebugLog(@"*** calling drawRect ***"); 

CGContextRef context = UIGraphicsGetCurrentContext(); 

// draw the dark gray background 
CGContextSetFillColor(context, [SkinManager getWhiteColor]); 
CGContextFillRect(context, CGRectMake(0.0, 0.0, rect.size.width, rect.size.height)); 

// draw the text field background in white 
CGContextSetFillColor(context, [SkinManager getDarkGray]); 
CGContextFillRect(context, CGRectMake(2.0, 2.0, rect.size.width - 4, rect.size.height - 4)); 

}

下面是產生顏色

+(const CGFloat*) getDarkGray { 
     UIColor *color = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1]; 

     return [self getCGColor:color]; 
} 

+(const CGFloat*) getCGColor: (UIColor*)color { 
     CGColorRef colorref = [color CGColor]; 

     const CGFloat *components = CGColorGetComponents(colorref); 

     return components; 
} 

同樣的代碼,這個代碼完全在的iOS 4.x和在iOS 5的模擬器中。唯一破壞的地方是iOS 5設備。

+0

請發佈您的代碼,它更可能存在一個問題比在iOS中,因爲它是如此非常基本,其他人也會遇到它,以及如果真的有一個錯誤(我們公司有幾個iOS應用程序,我們還沒有看到這方面的任何問題)。 – DarkDust

+1

另外,iOS 5仍處於NDA之下,因此您可能需要訪問開發論壇。 – Phlibbo

+0

我確實在開發論壇發佈了一個問題,但到目前爲止沒有人有任何答案。 – Jay

回答

0

而不是在您的代碼中使用rect,請嘗試使用self.bounds。 Rect是需要令人耳目一新的區域,而不是整個區域。

+0

我嘗試使用self.bounds,它沒有任何區別。 – Jay

+1

你確定drawRect是在一個子類中而不是一個類?在類別中重寫並不總是適用於所有版本的iOS。 – EricS

+0

是的,它是一個子類。它實際上是一個子類的子類。我非常有信心這是自模擬器正常工作以來的錯誤。 – Jay

0

在iOS 5中drawRect:不在某些物體上,例如, UINavigationBar。在這種情況下,您必須有條件地使用新的iOS 5樣式化方法。

This問題和this問題可能對您有用。

+1

不正確;它只是說它不會被調用,除非你在一個子類中。 OP指的是一個'UIView',而不是任何適用的視圖。 – FeifanZ

2

使用[self setNeedsDisplay];

drawRect方法只在初始化調用,因此它可以通過,如果你的對象是以前inited,你需要「刷新」了。

相關問題