iOS 5 UIView drawRect覆盖不能在设备上工作

问题描述:

我正准备我的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

而不是在您的代码中使用rect,请尝试使用self.bounds。 Rect是需要令人耳目一新的区域,而不是整个区域。

+0

我尝试使用self.bounds,它没有任何区别。 – Jay

+1

你确定drawRect是在一个子类中而不是一个类?在类别中重写并不总是适用于所有版本的iOS。 – EricS

+0

是的,它是一个子类。它实际上是一个子类的子类。我非常有信心这是自模拟器正常工作以来的错误。 – Jay

在iOS 5中drawRect:不在某些物体上,例如, UINavigationBar。在这种情况下,您必须有条件地使用新的iOS 5样式化方法。

This问题和this问题可能对您有用。

+1

不正确;它只是说它不会被调用,除非你在一个子类中。 OP指的是一个'UIView',而不是任何适用的视图。 – FeifanZ

使用[self setNeedsDisplay];

drawRect方法只在初始化调用,因此它可以通过,如果你的对象是以前inited,你需要“刷新”了。