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 会在触摸时重新出现?
UIButton 上的 CGAffineTransformMakeTranslation 问题