设置子视图的初始位置

时间:2013-10-21 17:23:51

标签: iphone ios objective-c

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

我的视图层次结构:

  1. self.view -main view我正在添加子视图(UIImageView);
  2. _aImageView - 我正在添加的UIImageView。
  3. 结果:

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

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

2 个答案:

答案 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;

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