UIButton上的CGAffineTransformMakeTranslation问题

时间:2013-05-16 16:02:56

标签: objective-c animation uibutton transformation uitoolbar

我有一个我无法解释的问题。

我有一个带有视图的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以上)到原始位置)

嗯,这个问题很难解释,但我希望能够清楚。 如果您需要更多精确的理解,请不要犹豫,向我询问更多细节。

1 个答案:

答案 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不起作用,以及为什么这个函数不能同时对几个项目起作用。