0

我有一个 ViewController,我在情节提要中应用了视网膜 3.5" 外形。iOS iPhone 6.1 模拟器还配置了 Retina。
当我尝试使用 SetFrame 定位 UIImageView 时,它的 CGRect 坐标是非视网膜形式(即当我定位到 320x480 时,它会转到右下角而不是屏幕中间):

[myImageView setFrame:CGRectMake(320, 480, myImageView.frame.size.width, myImageView.frame.size.height)];
[self.view addSubview:myImageView];

使用 SetFrame 时如何获得 Retina 的 CGRect 坐标?
谢谢。

4

2 回答 2

4

这样做的原因是因为 iOS 使用点而不是像素。这样,相同的代码将适用于视网膜和非视网膜屏幕。因此,当您将位置设置为 (320,480) 时,您将其设置为点 (320,480) 而不是像素 (320,480)。这样,如果手机不是视网膜,该点最终将是像素 (320, 480),而在视网膜上,它将最终是像素 (640,960)。

所以它看起来像你想要的是:

[myImageView setFrame:CGRectMake(160, 240, myImageView.frame.size.width, myImageView.frame.size.height)];
[self.view addSubview:myImageView];

这会将 imageView 的左上角放置在视网膜和正常显示上的相同位置。

于 2013-07-27T20:59:18.273 回答
1

居中视图:

CGFloat x = self.view.frame.size.width;
CGFloat h = self.view.frame.size.height;
[myImageView setCenter:CGPointMake(w/2, h/2)];
...
[self.view addSubview:myImageView];

CGRectMake 需要 ax,y,width,height.. X,y 是视图的左上角,因此对于全帧视图使用 0,0,w,h。

于 2013-07-27T21:23:14.613 回答