Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
Iphone 视网膜显示器上的字体和线条_Iphone_Objective C_Ios_Retina Display - Fatal编程技术网

Iphone 视网膜显示器上的字体和线条

Iphone 视网膜显示器上的字体和线条,iphone,objective-c,ios,retina-display,Iphone,Objective C,Ios,Retina Display,我已经在@1x版本中完成了我的应用程序,并用代码创建了很多界面,这意味着: UILabels UIViews 一切看起来都很棒。如果我现在在视网膜显示器上使用这个应用程序,很明显,所有东西都可以扩展到@2x。我用fireworks/photoshop设计了一些图形,当然,我制作了@2x版本,效果很好。我的问题是上面提到的标准接口元素 问题:我该怎么办 UILabel中的字体在两种分辨率上都有1px的笔划,但在@2x上的高度和宽度都是原来的两倍 在两种分辨率上都有高度为1px(作为屏幕分隔符

我已经在@1x版本中完成了我的应用程序,并用代码创建了很多界面,这意味着:

  • UILabels
  • UIViews
一切看起来都很棒。如果我现在在视网膜显示器上使用这个应用程序,很明显,所有东西都可以扩展到@2x。我用fireworks/photoshop设计了一些图形,当然,我制作了@2x版本,效果很好。我的问题是上面提到的标准接口元素

问题:我该怎么办

  • UILabel中的字体在两种分辨率上都有1px的笔划,但在@2x上的高度和宽度都是原来的两倍
  • 在两种分辨率上都有高度为1px(作为屏幕分隔符)的UIView?@2x上的2px线条是可以的,但我真的希望它们有1px的高度-看起来更优雅
要创建我当前使用的分隔符视图,请执行以下操作:

UIView *separatorLine = [[UIView alloc]initWithFrame:CGRectMake(0,200,320,1)];
[self.view addSubview:seperatorLine];
在@1x分辨率下效果良好,但在@2x中放大到2px高度,而不是在@2x中显示为:

seperatorLine.frame == (0,400,640,1)

我需要如何更改这样的代码才能在两种分辨率下工作?

您可以通过

CGFloat scale = ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] ? [UIScreen mainScreen].scale : 1.0);

如果刻度等于2.0,你就在视网膜显示器上,可以将分隔符的框架更改为
CGRectMake(0.0200.0320.0,0.5)

在使用苹果的可可元素时,你不必担心这些,这是视网膜显示器对我们开发者来说最好的部分

你需要像你说的那样@2x你的图形,但是设备会根据需要自动缩放显示元素。苹果公司明确区分了“像素”和“点”,并使用点设置帧。一个点在传统显示器上为1px,在视网膜显示器上为2px。这意味着,事实上,如果您将您的帧设置为
CGRectMake(0400640,1)
,正如您所提到的,将把该行放在屏幕的底部,并且是屏幕宽度的两倍(当然会被屏幕的边界截断)。如果你真的希望这条线在视网膜显示器上有1px的高度,那就把它做成一个图像。标准图像可以是320x1,@2x可以是640x1

如果您想了解我的意思,但没有视网膜显示设备,您可以在模拟器中运行,并从菜单“硬件>设备>iPhone(视网膜)”中选择


祝你好运。

基本上是这样的:如果(2.0){seperator.frame=highres}其他{seperator.frame=lores}添加子视图:seperator?有趣的是:为什么你使用.5作为高度,但仍然放大位置?对不起,我想
seperatorLine.frame==(0400640,1)
是你的默认帧。编辑。是的,你可以在你的第一条评论中这样做,但是
if
应该是
if(scale==2.0)
。好的-现在很清楚如何处理分隔符之类的-你对字体也有什么建议吗?这是现在接受唯一缺少的东西:P赢得了投票权,非常感谢!你不能,也不应该,得到一种笔划为1px的字体。在视网膜和非视网膜上使用相同的字体会很好,只是在视网膜上看起来更好。如果你按照你的要求去做,字体就会看起来非常细长。同样的图形,真的-用点绘制,而不是字体,视网膜显示器上的1px线将非常薄,看起来更像是屏幕上的故障。