2015-09-08 2 views
0

У меня есть UIButton, и я хочу, чтобы он вращался на определенное количество всякий раз, когда я нажимаю его. Если я использую этот код и повернуть его точно 90 градусов против часовой стрелки:Почему моя кнопка исчезает, когда я использую CGAffineTransformRotate?

CGAffineTransform transform = CGAffineTransformRotate(self.transform, 
    (-M_PI * 2.0) * 0.25); 
self.transform = transform; 

все работает, как ожидалось (это также работает, если я использую положительное значение и вращайте по часовой стрелке). Если, однако, я пытаюсь повернуть кнопку на 45 градусов:

CGAffineTransform transform = CGAffineTransformRotate(self.transform, 
    (-M_PI * 2.0) * 0.125); 

Моя кнопка просто полностью исчезает. Если да, то:

CGAffineTransform transform = CGAffineTransformRotate(self.transform, 
    (-M_PI * 2.0) * 0.20); 

кнопка странно вытянута, хотя угол кажется правильным.

Я просто хочу повернуть свою кнопку на место, без какого-либо изменения размера, в произвольном уголке, который я хочу - что я делаю неправильно здесь?

Обновление: Это происходит только в том случае, если я пытаюсь переместить/разместить мою кнопку внутри viewDidLayoutSubviews. Я предполагаю, что это связано с тем, что изменение преобразования приводит к вызову viewDidLayoutSubviews, после чего позиционирование все запутано.

Если я не пытаюсь позиционировать кнопку в представлении ViewDidLayoutSubviews и устанавливаю только маску autoresizingMask при загрузке кнопки, она сохраняет свое правильное положение посередине - если я не поверну ее, изменив преобразование. Это вращение работает и поворачивает кнопку на месте, но как только я поворачиваю устройство на пейзаж и обратно на портрет (иногда, когда я иду в пейзаж), кнопка полностью исчезает.

Этот трюк, похоже, работает только на элемент управления, который никогда не должен двигаться (кроме вращающейся).

+0

Я не могу воспроизвести это. Вы уверены, что у вас нет других преобразований, примененных к кнопке? Вы не можете произвольно повернуть что-то, что было переведено, например. Предоставьте MCVE http://stackoverflow.com/help/mcve. –

+0

@RobNapier: aha, это происходит, если я установил позицию своей кнопки в 'viewDidLayoutSubviews'. Если я не попытаюсь установить его там, вращение работает нормально, как ожидалось. – MusiGenesis

ответ

0

Таким образом, моя проблема заключалась в том, что преобразования меняют, когда вы перемещаете представление в viewDidLayoutSubviews (или если оно было изменено каким-либо образом, например, через свойство autoresizingMask).

Я уверен, что есть способ решить эту проблему с реальным знанием того, как работают преобразования, но мое простое решение - просто поместить мою кнопку в другое представление того же размера, что и кнопка, а затем просто переместить этот вид контейнера, Мне это нужно.

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