0

所以我想使用以下代码将子视图( 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)。

我的视图层次结构:

  1. self.view - 我要添加子视图的主视图(UIImageView);
  2. _aImageView - 我正在添加的 UIImageView。

结果:

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) 位置。

我检查过的类似问题的链接:

4

2 回答 2

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];
于 2013-10-21T18:43:59.667 回答
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;

如果失败,则在代码的另一部分更改视图,或者视图已正确添加到屏幕上,但图像为零。

于 2013-10-21T21:53:34.790 回答