我在具有白色背景颜色的超视图中显示UIImageView
s的不透明PNG。什么是最好的表现?
UIImageView
默认 opaque = NO
,backgroundColor = nil
,clearsContextBeforeDrawing = YES
。
UIView
Class Reference UIView Class Reference: backgroundColor说,“[nil
]会产生透明的背景色。”如果我将UIView
s opaque
property设置为YES
,我还必须将其backgroundColor
设置为[UIColor clearColor]
,或者是额外的代码行&加工不必要?即,[UIColor clearColor]
被认为是不透明的(不透明)?
clearsContextBeforeDrawing
的值对于不透明视图是否重要?
clearsContextBeforeDrawing
中UIView.h
的评论表示,对于不透明视图,它会被忽略。
但是,UIView Class Reference: clearsContextBeforeDrawing说:
如果视图的
opaque
属性也设置为YES
,则backgroundColor
属性为 视图不得为nil
,否则可能会出现绘图错误。
这是什么?
答案 0 :(得分:7)
假设您的PNG始终填满整个UIImageView
,您应该使用以下方式获得最佳效果:
opaque = YES
,clearsContextBeforeDrawing = NO
。在此模式下,backgroundColor
无关紧要。只需用新的图像数据替换像素。
对于单色背景上的透明PNG,最快的将是:
opaque = YES
,clearsContextBeforeDrawing = YES
和backgroundColor
匹配您需要的任何内容。在这种情况下[UIColor whiteColor]
。
答案 1 :(得分:3)
如果将UIView的opaque属性设置为YES,则必须确保绘图完全填充视图而没有透明度。所以,你需要设置一个白色的背景颜色(一个明确的颜色不起作用,因为那不是不透明的)。
我认为你不想更改图像视图的默认值,但是你应该确保你的PNG没有任何透明度(也就是说,没有alpha通道;你可以在Preview的图像检查器中检查它;确保它没有说'Has Alpha'。)我相信如果你给它一个不透明的图像,UIImageView会做正确的事情。
根据背景中的内容,使用opaque = YES和图像视图的白色背景可能会获得更好的性能(为了防止重绘父视图的部分),但我不会那样开始。