我有两个自定义UIButton具有相同的image.One是以编程方式创建的,模糊,另一个是使用故事板,工作正常。这是我的代码
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIButton *purchaseButton=[UIButton buttonWithType:UIButtonTypeCustom];
purchaseButton=[UIButton buttonWithType:UIButtonTypeCustom];
purchaseButton.frame=CGRectMake(0, 35.5+30, 177, 55);
[purchaseButton setImage:[UIImage imageNamed:@"GouMai1.png"] forState:UIControlStateNormal];
[self.view addSubview:purchaseButton];
}
这是项目下载link(由于GFW,我只能将其上传到中文网站)。这是一个Xcode错误吗?
答案 0 :(得分:2)
purchaseButton.frame=CGRectMake(0, 35.5+30, 177, 55);
有你的问题。永远不要给界面对象非整数坐标。它会很模糊! - 您会注意到在
原因是在屏幕上有物理像素,并且没有半像素这样的东西:每个像素都是打开或关闭的,就像它一样。因此,如果你使用半点坐标,它们就不能完全匹配像素,系统会模糊匹配的东西(抗锯齿等)。
所以,摆脱.5
,事情会好得多。
答案 1 :(得分:1)
与@matt所说的相反,只要它是视网膜设备,你现在可以做.5。你甚至可以拥有.5的宽度和高度,这就是iOS 7在某些地方获得非常细线的方式。
当我运行您的示例应用程序时,在Retina iPad模拟器中它并不模糊(不会比源图像模糊)。但在非Retina iPad模拟器中它很模糊,这是因为帧中的.5。
您需要测试屏幕的比例[UIScreen mainScreen].scale
并仅在比例为>时添加.5。 1。
另请注意,您正在使用该代码创建两个按钮。您可以删除重复的行purchaseButton=[UIButton buttonWithType:UIButtonTypeCustom];
答案 2 :(得分:0)
purchaseButton.frame=CGRectMake(0, 35.5+30, 177, 55);
实际上
IOS主要基于点和dpi渲染所有内容,因此尝试使用半点会导致模糊。 (这就是为什么我们不能将坐标设置为界面构建器中的点)
因此不允许浮动强制它们导致模糊。请使用最接近的整数值。
另一方面,因为将偶数除以奇数将主要给出浮点系数。在动态执行计算时,我们必须使用ceil和floor方法。
purchaseButton.frame=CGRectMake(0, ceil(self.view.fram.size.width/3), 177, 55);