为 uibutton 将 3 行动画化为 iOS 中的箭头

Animate 3 lines into arrow in iOS for a uibutton

有谁知道如何通过将 CGAfflineRotation 应用于 3 个视图来将 3 条平行线动画化为右箭头,就像在导航菜单栏中发生的那样以打开侧边菜单。

我真的需要这些方面的帮助,这样至少我可以有一个开始的想法。

这是尝试绘制它的样子:-

_______                  
_______                        \
_______         to   ___________\
                                /
                               /

任何想法或建议都会有所帮助。

正如你所说,你应该使用CGAffineRotation。我给出了您想要的简单示例,所有内容都应该打包到适当的方法中,视图应该包含一些基本的 autolayouts/layoutFrames 等。我只是快速发布可能的轮换解决方案写在viewDidAppear,应该改什么

另一种选择是使用 firstView.layer.anchorPoint 并将其设置到适当的位置。

#define degreesToRadians(x) (M_PI * x / 180.0)

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    // let's create these 3 views as a lines
    UIView *firstView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 50, 1)];
    [firstView setBackgroundColor:[UIColor blackColor]];
    [self.view addSubview:firstView];
    UIView *secondView = [[UIView alloc] initWithFrame:CGRectMake(50, 53, 50, 1)];
    [secondView setBackgroundColor:[UIColor blackColor]];
    [self.view addSubview:secondView];
    UIView *thirdView = [[UIView alloc] initWithFrame:CGRectMake(50, 56, 50, 1)];
    [thirdView setBackgroundColor:[UIColor blackColor]];
    [self.view addSubview:thirdView];

    // now we can perform rotation, mind the degree and offsets in transform.
    [UIView animateWithDuration:1 animations:^{
        CGAffineTransform transform = CGAffineTransformMakeTranslation(24, 1);
        transform = CGAffineTransformRotate(transform, degreesToRadians(45));
        transform = CGAffineTransformTranslate(transform, -24, 1);
        firstView.transform = transform;

        transform = CGAffineTransformIdentity;
        transform = CGAffineTransformMakeTranslation(24, -1);
        transform = CGAffineTransformRotate(transform, degreesToRadians(-45));
        transform = CGAffineTransformTranslate(transform, -24, -1);
        thirdView.transform = transform;
    } completion:^(BOOL finished) {}];
}

用 CALayer Animation 比 UIView Animation 更容易做这样的动画。您需要添加三个子图层:top_line、middle_line 和 bottom_line。然后在每一层和正确的位置画线(Hint:画线使用CAShapeLayer)。最后把top_line和bottom_line层旋转一个合适的角度,你可能还需要改变锚点和层的位置。最后一步很棘手,也许只是用不同的角度和锚点值做一些试验,直到找到最合适的。
当你成功制作了这样的动画后,尝试制作反向动画。然后创建一个嵌入了这两个动画的自定义 UIButton。恭喜!您有一个带有炫酷动画的汉堡包按钮,可以在任何地方重复使用!