Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 应用程序中的所有元素都是像素化的_Ios_Objective C_Xcode_User Interface_Uibutton - Fatal编程技术网

Ios 应用程序中的所有元素都是像素化的

Ios 应用程序中的所有元素都是像素化的,ios,objective-c,xcode,user-interface,uibutton,Ios,Objective C,Xcode,User Interface,Uibutton,下面的屏幕截图取自3.5英寸模拟器 这些是一堆UIButton,边框是通过编程方式创建的,如下所示: btn.layer.cornerRadius = btn.frame.size.width / 2; 我不知道,但现在应用程序中的所有字体和按钮都被像素化了。几乎所有的东西都被像素化了 我检查了Xcode中的每个设置 我试图清理项目,然后清理了DerivedData文件夹 我尝试在另一台机器上构建应用程序 我在真正的设备上试用了这个应用程序。同样的问题 还没有结果。可能是生成的帧没有

下面的屏幕截图取自3.5英寸模拟器

这些是一堆UIButton,边框是通过编程方式创建的,如下所示:

    btn.layer.cornerRadius = btn.frame.size.width / 2;

我不知道,但现在应用程序中的所有字体和按钮都被像素化了。几乎所有的东西都被像素化了

我检查了Xcode中的每个设置

我试图清理项目,然后清理了DerivedData文件夹

我尝试在另一台机器上构建应用程序

我在真正的设备上试用了这个应用程序。同样的问题


还没有结果。

可能是生成的帧没有在偶数整数上对齐。i、 e.移动/更改宽度会导致框架类似(100.5、50.0、50.0、50.0)。当您在半像素边界上绘图时,某些绘图例程会使事物看起来模糊,以尝试使其显示在正确的位置。我会在动画后打印出帧并检查:

NSLog(@"%@", NSStringFromCGRect(yourButton.frame));
如果看到任何非整数值,请使用
floor()
函数之一修改生成的帧,以便将其捕捉到边界

我的UILabel也有同样的问题(当我改变框架时)

在使用
floor()
方法之前:

及之后:


在视网膜设备上实现像素化的一种简单方法是在不设置正确的
光栅化比例的情况下对层进行光栅化

view.layer.shouldRasterize = YES;
view.layer.rasterizationScale = UIScreen.mainScreen.scale;
如果没有第二条线,对于非视网膜设备,这些东西看起来很好,但是对于视网膜设备,它们看起来很糟糕

…如果没有更多的代码,很难说这是否是您看到的问题,但这是一个非常常见的错误,值得发布


您是否真的应该光栅化是一个单独的问题……需要注意性能权衡。

您在真正的设备上尝试过吗?我现在正在用圆形按钮进行真正的项目,还没有遇到这个问题。是的,我在真正的设备上试过,同样的问题。太奇怪了!!你在使用图像吗?没有,在屏幕截图中只是简单的UIButtons。你是说添加行
btn.layer.cornerRadius=btn.frame.size.width/2
导致应用程序中的其他应用程序变得像素化,删除它可以解决问题?thnx非常好@Ian,我给所有UIViewController设置了阴影效果,我将self.view.layer.shouldRasterize=YES;为了提高性能,现在当我删除这一行。。。每件事都很好。@homam提高阴影渲染性能的更好方法是使用
layer.shadowPath
属性。如果你有一个大半径,它仍然很昂贵,但总比没有好。是的,我注意到性能很差。我试过
vc.view.layer.shadowColor=[UIColor blackColor].CGColor;vc.view.layer.shadowRadius=10;vc.view.layer.shadowOpacity=.25;vc.view.layer.shouldRasterize=是;vc.view.layer.rasterizationScale=UIScreen.mainScreen.scale;self.view.layer.shadowPath=[UIBezierPath-bezierpath-withrect:self.view.frame].CGPath