我有一个我无法解释的问题。
我有一个带有视图的viewController。 该视图包含UI按钮和工具栏。 因为toolBar是一个参数栏,所以我不希望它一直出现在我的视图中。 所以我决定用一个按钮来显示它。
我正在使用界面构建器来设计我的视图。 按钮位于左上角,工具栏位于视图上方。 (原产地:0,-44)
我已将我的按钮链接到显示我的工具栏的IBAction功能:
- (IBAction)showOptions:(id)sender {
if([parametersBar isHidden])
{
[parametersBar setHidden:NO];
[UIView animateWithDuration:0.2
animations:^{
[parametersBar setTransform:CGAffineTransformMakeTranslation(0, 44)];
}
];
}
}
(parametersBar设置为隐藏在viewDidLoad中)
这很好用。
但我们在这里:我的按钮现在被工具栏隐藏了! 那么翻译它呢?
不可能将我的两个元素翻译成44px !!我以为我做错了什么。但即使只是按下移动按钮,翻译的结果也不是预期的结果。
- (IBAction)showOptions:(id)sender {
if([parametersBar isHidden])
{
[parametersBar setHidden:NO];
[UIView animateWithDuration:0.2
animations:^{
[parametersButton setTransform:CGAffineTransformMakeTranslation(0, 44)];
}
];
}
}
我在动画之前和之后放了一些NSLog:他们写了我的按钮的预期位置但是在我的设备屏幕上,它不在正确的位置。 并且在两个元素处执行转换会导致工具栏不在正确的位置。
我在我的.xib中使用Autolayout。这可能是这些问题的原因吗? 对要求此转换的按钮执行转换是否会产生影响?
(顺便说一句,在3GS上运行相同的代码具有不同的效果:按钮跳转,并使预期的翻译从它的位置(44px以上)到原始位置)
嗯,这个问题很难解释,但我希望能够清楚。 如果您需要更多精确的理解,请不要犹豫,向我询问更多细节。
答案 0 :(得分:0)
我找到了替代问题的方法。
更换一行:
[btShowParam setTransform:CGAffineTransformMakeTranslation(0, -44)];
使用:
[btShowParam setCenter:CGPointMake(btShowParam.center.x, btShowParam.center.y + 44)];
使按钮动画效果良好。
最后,我有:
[UIView animateWithDuration:0.2
animations:^{
[parametersBar setCenter:CGPointMake(parametersBar.center.x, parametersBar.center.y + 44)];
[btShowParam setCenter:CGPointMake(btShowParam.center.x, btShowParam.center.y + 44)];
[btShowParam setAlpha:1];
}
];
但是我仍然想知道为什么setTransform:对我的UIButton不起作用,以及为什么这个函数不能同时对几个项目起作用。