2010-10-26 3 views
0

Я вращаю колесо, которое имеет различные подвид (UIImageViews и UIButtons) Однако, когда я прошу его отображать каждый центр каждого поднабора, он дает мне то же значение каждый раз.Координаты не будут меняться при повороте Цель c

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
} 

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSSet *allTouches = [event allTouches]; 

    int len = [allTouches count]-1; 

    UITouch *touch =[[allTouches allObjects] objectAtIndex:len]; 
    CGPoint location = [touch locationInView:[self superview]]; 
    float theAngle = atan2(location.y-self.center.y, location.x-self.center.x); 

    totalRadians = theAngle; 

    [self rotateImage:theAngle]; 

} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
} 

-(void) rotateImage:(float)angleRadians{ 

    self.transform = CGAffineTransformMakeRotation(angleRadians); 
    CATransform3D rotatedTransform = self.layer.transform; 
    self.layer.transform = rotatedTransform;  
    int count = 0; 
    for (UIView *subview in self.subviews) 
    { 
    count++;  
     //these values are always the same 
    NSLog(@"%i %f %f", count, subview.center.x, subview.center.y); 
    } 
} 

Может кто-то пожалуйста, скажите мне, почему значения всегда приходит тот же, даже после того, как повернут и помещен в другую позицию?

Спасибо!

+1

Настройка уровня преобразования к чисто-вращательное преобразование всегда вращается вокруг текущего центра слоя. Кажется, вы не применяете трансляционные преобразования. Какое поведение вы ожидали? – warrenm

+0

Потому что я вращаю изображение, которое содержит различные компоненты. Эти компоненты должны менять координацию. Имею ли я смысл? – Lilz

+1

Центр подвидности выражается относительно координатного пространства его супервизора. Поэтому, несмотря на то, что subviews перемещаются в пространстве экрана, они не перемещаются относительно своего родителя, если вы явно не применяете к ним поворот. Для большинства случаев использования субвизны имеют смысл сохранять свое относительное положение. – warrenm

ответ

1

Чтобы отказаться от того, что было сказано в комментариях, центр выражается в границах супервизора. Границы не зависят от вращения, {0,0} всегда находится в верхнем левом углу обзора.

Чтобы получить то, что вы хотите, вы должны применить поворот к центральной точке,

rotatedCenter = CGPointApplyAffineTransform(subview.center, self.transform);

+0

thnx так это, другими словами, найдет правильные координаты центра в соответствии с трансформацией, которая произошла? – Lilz

+0

Должно. Это также будет работать для любого преобразования, а не только вращения. –

+0

ничего себе это выглядит хорошо. Благодарю. один последний вопрос пожалуйста. если я получаю отрицательные числа, это правильно? или я делаю что-то неправильно и, таким образом, давая неверный результат? – Lilz

Смежные вопросы