显示CGRect位置重置我的图像位置

时间:2013-07-28 07:30:15

标签: iphone ios objective-c ipad


我正在制作一些CGRect Utils类和函数来帮助我们操作CGRect和View的框架。

我面临一个非常奇怪的问题。我有一个图像,我可以通过按下某个按钮来移动。

- (IBAction)heightPlusTen:(id)sender {
    CGRectAddHeightToView(myView, 10);
}

CGRectAddHeightToView只是一个#define,可以替换为:

- (IBAction)heightPlusTen:(id)sender {
    myView.frame = CGRectMake( myView.frame.origin.x,
             myView.frame.origin.y,
             myView.frame.size.width,
             myView.frame.size.height+10 );
}

到目前为止,图像正在移动。一切都很好...... 直到我运行此代码:

- (IBAction)updatePosition:(id)sender {
    xLabel.text = [NSString stringWithFormat:@"%.0f", duck.frame.origin.x];
    yLabel.text = [NSString stringWithFormat:@"%.0f", duck.frame.origin.y];
    wLabel.text = [NSString stringWithFormat:@"%.0f", duck.frame.size.width];
    hLabel.text = [NSString stringWithFormat:@"%.0f", duck.frame.size.height];
}

假设在屏幕上显示x,y,宽度和高度。但相反,它会将图像移回几乎的初始位置。

我知道很多代码都丢失了所以checkout CGRect Utils on github

2 个答案:

答案 0 :(得分:2)

导致问题的是自动布局..现在你可以一起删除所有自动布局,或者你可以保留它(以及它的许多好处),但是一旦xib加载就立即对标签进行实例化。就像这样:

// ViewController.m 
-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    xLabel.text = [NSString stringWithFormat:@"%.0f", duck.frame.origin.x];
    yLabel.text = [NSString stringWithFormat:@"%.0f", duck.frame.origin.y];
    wLabel.text = [NSString stringWithFormat:@"%.0f", duck.frame.size.width];
    hLabel.text = [NSString stringWithFormat:@"%.0f", duck.frame.size.height];        
}

这样,在将来更新标签时,autolayout将不必重新调整任何内容。

答案 1 :(得分:1)

你真的应该考虑在这个时代使用ARC。

至于你的问题:autolayout在更新标签时导致此帧重置。

如果您在ViewController.xib上停用它,那么您的代码将“按预期”运行。

有关autolayout以及如何使用它的非常好的教程可以在这里找到:Beginning Auto Layout in iOS 6

Autolayout是一个很好的工具,但有时会引起严重的麻烦。