所以我想使用以下代码将subview( UIImageView )添加到我的主视图中:
NSString *fileLocation = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"background_main.png"];
_aImage = [[UIImage alloc] initWithContentsOfFile:fileLocation];
_aImageView = [[UIImageView alloc] initWithImage:_aImage];
_aImageView.frame = CGRectMake(-200, 0, _aImage.size.width, _aImage.size.height);
[self.view addSubview:_aImageView];
如你所见 - 我正在将UIImageView添加到位置(-200; 0);
但它出现在默认位置:(0; 0)。
我的视图层次结构:
结果:
NSLog(@"image is %@",_aImageView); //result (-200 0; 420 568)
CGPoint test = [_aImageView convertPoint:_aImageView.frame.origin toView:self.view];
NSLog(@"convert %f %f",test.x,test.y); //result (-400.000000; 0.000000)
我知道这个位置仍然是(0; 0),因为我可以在测试我的应用时看到它。后来当我将_aImageView的位置改为(-50; 0)时,它显示黑屏。我知道我错过了一些非常重要的东西,但我无法弄清楚为什么它出现在(0; 0)位置。
链接到我检查的类似问题:
答案 0 :(得分:0)
我相信你无法在layoutSubviews中更改框架。您可以在layoutSubviews ...
中设置框架-(void)layoutSubviews
{
[_aImageView setFrame:CGRectMake(-200, 0, _aImage.size.width, _aImage.size.height)];
}
或先设置框架,然后在初始化UIImageView的任何地方添加图像......
_aImageView = [[UIImageView alloc] initWithFrame:CGRectMake(-200, 0, _aImage.size.width, _aImage.size.height];
[_aImageView setImage:_aImage];
答案 1 :(得分:0)
NSString *fileLocation = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"background_main.png"];
_aImage = [[UIImage alloc] initWithContentsOfFile:fileLocation];
_aImageView = [[UIImageView alloc] initWithImage:CGRectMake(-200, 0, _aImage.size.width, _aImage.size.height)];
[_aImageView setImage:_aImage];
[self.view addSubview:_aImageView];
如果这不起作用,请尝试在viewDidAppear方法中更改它的帧(我假设您在viewDidLoad中添加它)。
最后一个解决方案是在屏幕上添加视图后设置视图的中心。
CGPoint pt=CGPointMake(-200+_aImageView.frame.size.width/2,_aImageView.frame.size.height/2);
_aImageView.center=pt;
如果失败,视图会在代码的另一部分中更改,或者视图会在屏幕上正确添加,但图像为零。