使用 CABasicAnimation 旋转的 UIButton 不会移动初始触摸坐标

Posted

技术标签:

【中文标题】使用 CABasicAnimation 旋转的 UIButton 不会移动初始触摸坐标【英文标题】:UIButton rotate with CABasicAnimation does not move initial touch coordinates 【发布时间】:2014-08-24 10:08:55 【问题描述】:

我有一个 UIView,我在上面添加了一个 UIButton。我将 UIView 旋转 180 度。旋转 UIView 后,它里面的所有东西看起来都旋转了,包括按钮。但是当我点击按钮时。它仅从其初始位置接收触摸事件。不是从它出现在屏幕上的位置。这是我的代码 -

CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
fullRotation.fromValue = [NSNumber numberWithFloat:0];
fullRotation.toValue = [NSNumber numberWithFloat:((180*M_PI)/180)];
fullRotation.speed = 1.0;
fullRotation.autoreverses = NO;
fullRotation.removedOnCompletion = NO;
fullRotation.fillMode = kCAFillModeForwards;
[_subView.layer addAnimation:fullRotation forKey:@"360"];

【问题讨论】:

【参考方案1】:

您无法从 Interface Builder 中执行此操作。您必须从代码中旋转它。像这样,

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 200)];
    [button addTarget:self action:@selector(selectedButton) forControlEvents:UIControlEventTouchUpInside];
    [button setBackgroundColor:[UIColor purpleColor]];

    CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
    fullRotation.fromValue = [NSNumber numberWithFloat:0];
    fullRotation.toValue = [NSNumber numberWithFloat:((180*M_PI)/180)];
    fullRotation.speed = 1.0;
    fullRotation.autoreverses = NO;
    fullRotation.removedOnCompletion = NO;
    fullRotation.fillMode = kCAFillModeForwards;
    [button.layer addAnimation:fullRotation forKey:@"360"];

    [self.view addSubview:button];

现在selectedButton 将接收每个旋转的 UIButton 触摸。

【讨论】:

以上是关于使用 CABasicAnimation 旋转的 UIButton 不会移动初始触摸坐标的主要内容,如果未能解决你的问题,请参考以下文章

在 CABasicAnimation 中闪烁以进行旋转

iOS动画效果三:CABAsicAnimation实现平移、旋转和放大

CABasicAnimation 3D旋转

iOS 使用transform和CABasicAnimation实现视图围绕定点旋转和实现一个旋转的圆的动画 以转盘为例

在特定点停止 CABasicAnimation

在 UITableView 中删除 CABasicAnimation