ios - 如何将按钮旋转回水平方向?

标签 ios objective-c cgaffinetransform

我正在制作一个圆圈,上面有不同的按钮,并以相等的间隔隔开。
看起来是这样的:

我要使图片不旋转。我该如何实现?这是代码。

- (void)drawWheel
{
    // Drawing the Wheel view
    wheelView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 275, 275)];
    wheelView.center = self.view.center;
    wheelView.layer.cornerRadius = wheelView.frame.size.width / 2.0;
    wheelView.layer.borderColor = [UIColor whiteColor].CGColor;
    //wheelView.layer.borderWidth = 0.5f;

    CGFloat angleSize = 2 * M_PI / self.buttons.count;

    for(int i = 0; i < self.buttons.count; i++)
    {
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, wheelView.frame.size.width / 2.0, 40)];
        label.layer.anchorPoint = CGPointMake(1.0f, 0.5f);
        label.layer.position = CGPointMake(wheelView.bounds.size.width / 2.0, wheelView.bounds.size.height / 2.0);
        label.transform = CGAffineTransformMakeRotation(angleSize * i);
        label.backgroundColor = [UIColor clearColor];

        UIButton *button = [self.buttons objectAtIndex:i];
        button.center = CGPointMake(label.center.x, label.center.y + 15);
        button.transform = CGAffineTransformRotate(label.transform, 2 * (angleSize * i));
        [label addSubview:button];
        [wheelView addSubview:label];
    }

    [self.view addSubview:wheelView];
}

最佳答案

我想你可以做这样的事情...

- (void)drawWheel
{
    // Drawing the Wheel view
    wheelView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 275, 275)];
    wheelView.center = self.view.center;
    wheelView.layer.cornerRadius = wheelView.frame.size.width / 2.0;
    wheelView.layer.borderColor = [UIColor whiteColor].CGColor;
    //wheelView.layer.borderWidth = 0.5f;

    CGFloat angleSize = 2 * M_PI / self.buttons.count;

    for(int i = 0; i < self.buttons.count; i++)
    {
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, wheelView.frame.size.width / 2.0, 40)];
        label.layer.anchorPoint = CGPointMake(1.0f, 0.5f);
        label.layer.position = CGPointMake(wheelView.bounds.size.width / 2.0, wheelView.bounds.size.height / 2.0);
        label.transform = CGAffineTransformMakeRotation(angleSize * i);
        label.backgroundColor = [UIColor clearColor];

        UIButton *button = [self.buttons objectAtIndex:i];
        button.center = CGPointMake(label.center.x, label.center.y + 15);

        // change this line
        button.transform = CGAffineTransformMakeRotation(-angleSize * i);

        [label addSubview:button];
        [wheelView addSubview:label];
    }

    [self.view addSubview:wheelView];
}

在这里,我只是以相同的角度在另一个方向上变换按钮。

即如果标签旋转了35度,则按钮旋转了-35度。这意味着按钮相对于标签的回顾旋转了0度。

关于ios - 如何将按钮旋转回水平方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22910503/

相关文章:

swift - CGPathAddArc 在创建路径时遇到一些问题

objective-c - 处理中断的音频文件下载

ios - AFNetworking 与 CLLocation 给出错误

objective-c - Objective C 中带有 int 键的映射

iphone - Objective-C 中的单例共享数据源

ios - UICollectionViewCell 上的 CGAffineTransform 没有给出预期的结果

iphone - 如何识别已呈现 UIViewController

ios - HTML 不尊重 UIWebView 中的 .CSS 文件

ios - 我如何在不使用xcode中的xib的情况下将字符串值从一个 View Controller 传递给另一个 View Controller ?

iOS 2D 变换 : Library to use