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



我有一个ViewController,我在故事板中应用了retina 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时,如何获得视网膜的CGRect坐标
谢谢

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

所以你想要的是:

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

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

要使视图居中:

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、宽度、高度。。X、 y是视图的左上角,因此使用0,0,w,h表示全帧视图。

相关内容

  • 没有找到相关文章

最新更新