仅为UIBarButtonItem中的图像设置动画

Max*_*ral 4 objective-c rotation uiimageview uibarbuttonitem uiviewanimation

我已经在2个应用程序中看到了这种效果,我真的想找到如何做到这一点.

动画位于UIBarButtonItem中,仅适用于图像.图像是+符号,它旋转到X.

如果你想看到效果,你必须开始与某人对话,并在文本输入旁边有图像和表情符号的+按钮.或者在另一个应用程序中看到效果的视频,在他点击按钮后,您会看到它旋转到X,http://www.youtube.com/watch?v = S8JW7euuNMo.

我已经找到了如何做效果但只在UIImageView上,我必须关闭所有自动调整并且视图模式必须居中,然后将旋转变换应用于它.我尝试了很多尝试让它在条形项目中工作的方法,到目前为止,最好的方法是添加图像视图实例,然后设置它并将视图模式设置为居中并自动恢复,然后使用该图像视图进行自定义栏项目视图.但是当我这样做时,效果会有效,除非它这样做,图像会偏向一边而不是停留在已经存在的位置.我试过在动画之前获取中心并在动画期间设置它但是它什么也没做.

Max*_*ral 6

所以答案就是你必须创建一个Image视图的实例,然后设置它而不调整大小并且视图模式居中.然后将图像视图添加到具有自定义类型的UIButton,然后使用该按钮作为条形项的自定义视图.

- (IBAction)animate {
    [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{
        imageView.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(45));
    } completion:^(BOOL finished) {
        imageView.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(0));
        if ([imageView.image isEqual:[UIImage imageNamed:@"Add.png"]]) {
            imageView.image = [UIImage imageNamed:@"Close.png"];
        }
        else imageView.image = [UIImage imageNamed:@"Add.png"];
    }];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Add.png"]];
    imageView.autoresizingMask = UIViewAutoresizingNone;
    imageView.contentMode = UIViewContentModeCenter;
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0, 0, 40, 40);
    [button addSubview:imageView];
    [button addTarget:self action:@selector(animate) forControlEvents:UIControlEventTouchUpInside];
    imageView.center = button.center;
    barItem = [[UIBarButtonItem alloc] initWithCustomView:button];
    navItem.rightBarButtonItem = barItem;
}
Run Code Online (Sandbox Code Playgroud)