显示 CGRect 位置重置我的图像位置
Posted
技术标签:
【中文标题】显示 CGRect 位置重置我的图像位置【英文标题】:Displaying CGRect position reset my image position 【发布时间】: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。
【问题讨论】:
【参考方案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
是一个很棒的工具,但有时会引起严重的头痛。
【讨论】:
以上是关于显示 CGRect 位置重置我的图像位置的主要内容,如果未能解决你的问题,请参考以下文章