我正在使用此代码设置导航栏的背景,该代码在视网膜和非视网膜显示器中效果很好。有一个@2x 和普通图像。所以,一切都好:
UINavigationBar.Appearance.SetBackgroundImage(
GetImage(ImageTheme.menubar), UIBarMetrics.Default);
现在,当我应用这个ChangeHue()
对图像进行变换以调整其色调,在 Retina 上显示图像的大小是原来的两倍。非视网膜显示器没问题:
UINavigationBar.Appearance.SetBackgroundImage(
ChangeHue(GetImage(ImageTheme.menubar)), UIBarMetrics.Default);
...
UIImage ChangeHue(UIImage originalImage){
var hueAdjust = new CIHueAdjust() {
Image = CIImage.FromCGImage(originalImage.CGImage),
Angle = hue * (float)Math.PI / 180f // angles to radians
};
var output = hueAdjust.OutputImage;
var context = CIContext.FromOptions(null);
var cgimage = context.CreateCGImage(output, output.Extent);
var i = UIImage.FromImage(cgimage);
return i;
}
以下是应用色调后非视网膜和视网膜显示的结果:
忽略这些 HACK,并在您的ChangeHue
method:
var i = UIImage.FromImage(cgimage);
改为这样做:
float scale = 1f;
if (UIScreen.MainScreen.RespondsToSelector (new MonoTouch.ObjCRuntime.Selector ("scale"))) {
scale = UIScreen.MainScreen.Scale; // will be 2.0 for Retina
}
var i = new UIImage(cgimage, scale, UIImageOrientation.Up);
这应该返回一个UIImage
具有正确“比例”信息的对象可以正确显示在UINavigationBar
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)