Question

I'm making a circle with different buttons all over, spaced out at equal intervals. Here's what it looks like : enter image description here

I want to make it so that the picture doesn't rotate. How do I achieve that ? Here's the code.

- (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];
}
Was it helpful?

Solution 2

You could do something like this I think...

- (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];
}

Here I am just transforming the button in the other direction with the same angle.

i.e. if the label is rotated 35 degrees then the button is rotated -35 degrees. This will mean the button is rotated 0 degrees relative to the sup review of the label.

OTHER TIPS

I didn't check it, but could you change following code

button.transform = CGAffineTransformRotate(label.transform, 2 * (angleSize * i));

to

button.transform = CGAffineTransformMakeRotation(-1 * angleSize * i);

Here I am just rotating your button to opposite direction

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top