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