使用SetFrame时,CGRect以非视网膜形式坐标

时间:2013-07-27 20:39:31

标签: ios uiimageview retina-display cgrect

我有一个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坐标?
感谢。

2 个答案:

答案 0 :(得分: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的左上角放在视网膜和正常显示器上的相同位置。

答案 1 :(得分: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需要x,y,width,height .. X,y是视图的topleft,因此对于全帧视图使用0,0,w,h。