如何重新创建Apple在标准iOS UITableView中使用的旋转减号按钮?

时间:2011-11-03 00:46:15

标签: ios uitableview user-interface core-animation

我想在编辑模式下重新创建Apple在其UITableViews中使用的旋转减号按钮。您可以在this video on YouTube中看到动画。

有没有办法将此按钮(和动画)嵌入到我自己的视图中?或者我真的必须重新创建它?我需要为每个州制作图像吗?

此外,这里是该视频中间动画按钮的图片。

Button Animation

谢谢!

2 个答案:

答案 0 :(得分:3)

创建按钮并使用layer属性的阴影属性将不起作用,因为当图像旋转时,您不希望阴影也旋转。我通过执行以下操作重新创建了此效果。我创建了两个35像素正方形的图像。一旦调用delete-icon-bg.png,一个调用delete-icon-dash.pngdelete-icon-bg.png只是我想要的红色圆圈样式,而delete-icon-dash.png是一个透明的png,白色短划线居中,我希望它在背景上。然后我像这样配置按钮:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage:[UIImage imageNamed:@"delete-icon-bg.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"delete-icon-dash.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(didTouchDeleteButton:) forControlEvents:UIControlEventTouchUpInside];
button.adjustsImageWhenHighlighted = NO;
button.contentMode = UIViewContentModeCenter;

方法didTouchDeleteButton:如下所示:

- (void)didTouchDeleteButton:(UIButton *)sender
{
    if (sender.selected) {
        sender.selected = NO;
        [UIView beginAnimations:@"undoRotateDash" context:nil];
        [UIView setAnimationDuration:0.3];
        sender.imageView.transform = CGAffineTransformMakeRotation(0.0);
        [UIView commitAnimations];
    } else {
        sender.selected = YES;
        [UIView beginAnimations:@"rotateDash" context:nil];
        [UIView setAnimationDuration:0.3];
        sender.imageView.transform = CGAffineTransformMakeRotation(-M_PI_2);
        [UIView commitAnimations];
    }
}

答案 1 :(得分:2)

你可以用一张图片来做到这一点:

Table Delete Button

但是你需要创建一个自定义动画来进行从水平到垂直的旋转。动画看起来很简单,你可能只需将imageOrientation的{​​{1}}属性从UIImageOrientationUp更改为UIImageOrientationLeft

image.transform = CGAffineTransformMakeRotation(1.571);会将图像旋转90度。

正如评论中所提到的,阴影可能看起来很奇怪,所以我建议找一个没有阴影的图像,然后使用UIImage layer属性来旋转shadowRadiusshadowOffset等。

UIImage
UIImage Documentation