1

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

我有一个带有视图的 viewController。这个视图包含一个 UIbutton 和一个工具栏。因为 toolBar 是一个参数栏,我不希望它一直出现在我的视图中。所以我决定用一个按钮来显示它。

我正在使用界面构建器来设计我的视图。该按钮将位于左上角,工具栏位于视图上方。(原点:0,-44)

我已将按钮链接到显示工具栏的 IBAction 函数:

- (IBAction)showOptions:(id)sender {
    if([parametersBar isHidden])
    {
        [parametersBar setHidden:NO];
        [UIView animateWithDuration:0.2
                         animations:^{
                             [parametersBar setTransform:CGAffineTransformMakeTranslation(0, 44)];

                         }
         ];
    }
}

(在viewDidLoad中parametersBar设置为隐藏)

这工作正常。

但是我们在这里:我的按钮现在被工具栏隐藏了!!那么翻译它呢?

不可能让我的两个元素都转换为 44 像素!我以为我做错了什么。但即使只是让按钮移动,翻译的结果也不是预期的。

- (IBAction)showOptions:(id)sender {
        if([parametersBar isHidden])
        {
            [parametersBar setHidden:NO];
            [UIView animateWithDuration:0.2
                             animations:^{
                                 [parametersButton setTransform:CGAffineTransformMakeTranslation(0, 44)];

                             }
             ];
        }
    }

我在动画前后放了一些 NSLog:它们写了我的按钮的预期位置,但在我的设备屏幕上,它不在正确的位置。并且在这两个元素上执行翻译会导致工具栏不在正确的位置。

我在我的 .xib 中使用自动布局。会不会是这些问题的原因?对要求此转换的按钮执行转换是否有影响?

(顺便说一句,在 3GS 上运行相同的代码并没有相同的效果:按钮跳转,并使预期的翻译从它所在的位置(上面 44px)到它的原始位置)

好吧,这个问题很难解释,但我希望清楚。如果您需要更精确的理解,请随时向我询问更多详细信息。

4

1 回答 1

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

于 2013-05-17T07:11:11.180 回答