【问题标题】:Displaying CGRect position reset my image position显示 CGRect 位置重置我的图像位置
【发布时间】:2013-07-28 07:30:14
【问题描述】:


我正在制作一些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,width 和 height。但它会将图像移回它几乎的初始位置。

我知道很多代码都丢失了,所以请查看CGRect Utils on github

【问题讨论】:

    标签: iphone ios objective-c ipad


    【解决方案1】:

    导致问题的是自动布局。现在您可以一起删除自动布局,或者您可以保留它(以及它的许多好处),但也可以在 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];        
    }
    

    这样,当您以后更新标签时,自动布局不必重新调整任何内容。

    【讨论】:

      【解决方案2】:

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

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

      如果您在 ViewController.xib 上禁用它,那么您的代码将“按预期”工作。

      关于自动布局以及如何使用它的非常好的教程可以在这里找到:Beginning Auto Layout in iOS 6

      Autolayout 是一个很棒的工具,但有时会引起严重的头痛。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-23
        • 1970-01-01
        • 1970-01-01
        • 2012-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多