UIButton 上的 CGAffineTransformMakeTranslation 问题

Posted

技术标签:

【中文标题】UIButton 上的 CGAffineTransformMakeTranslation 问题【英文标题】:Issue with CGAffineTransformMakeTranslation on UIButton 【发布时间】:2013-05-16 16:02:56 【问题描述】:

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

我有一个带有视图的 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)];

                         
         ];
    

(parametersBar在viewDidLoad中设置为隐藏)

这很好用。

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

不可能让我的两个元素都转换为 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 以上)到它的原始位置)

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

【问题讨论】:

【参考方案1】:

我找到了解决问题的方法。

换行:

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

【讨论】:

以上是关于UIButton 上的 CGAffineTransformMakeTranslation 问题的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 上的 UITapGestureRecognizer

为啥 UIButton 上的 UIImageView 会在触摸时重新出现?

同一视图上的 tableview 和 UIButton

UIButton 上的 CGAffineTransformMakeTranslation 问题

避免 UIPickerView ios 上的 UIButton 覆盖

我可以更改 UIButton 上的色调颜色,但不能更改 UIImage