У меня никогда такого не было, и я не могу понять, что происходит. Я подозреваю, что это может быть автоматический макет, но я не понимаю, как это сделать. У меня есть представление «Компас», в котором есть несколько подпредставлений, которыми оно управляет (не является частью автоматического макета). Вот пример их настройки:
- (ITMView *) compass {
if (!_compass){
_compass = [ITMView new];
_compass.backgroundColor = [UIColor blueColor];
_compass.layer.anchorPoint = CGPointMake(.5, .5);
_compass.translatesAutoresizingMaskIntoConstraints = NO;
_compass.frame = self.bounds;
__weak ITMCompassView *_self = self;
_compass.onDraw = ^(CGContextRef ref, CGRect frame) { [_self drawCompassWithFrame:frame]; };
[self addSubview:_compass];
}
return _compass;
}
Мне нужно повернуть компас в ответ на изменение направления:
- (void) setCurrentHeading:(double)currentHeading{
_currentHeading = fmod(currentHeading, 360);
double rad = (M_PI / 180) * _currentHeading;
self.compass.transform = CGAffineTransformMakeRotation(rad);
}
Проблема в том, что по какой-то причине он вращается вокруг оси Z:
Я не манипулирую преобразованиями слоев в любых других представлениях. Кто-нибудь знает, почему это происходит?
Обновлять
Я проверил преобразование для всех супервизоров. Каждое суперпредставление имеет преобразование идентичности.
Я зарегистрировал преобразование вида компаса до и после того, как он был установлен в первый раз. До того, как он был установлен, преобразование имело идентичность, что и ожидалось. После того, как я установил преобразование для поворота на 242.81
градуса (4.24
рад), я получаю:
[
-0.47700124155378526, -0.87890262006444575,
0.87890262006444575, -0.47700124155378526,
0, 0
]
Обновление 2
Я проверил CATransform3DIsAffine
, и он всегда возвращает YES
. Я дважды проверил преобразование слоя и для поворота на 159.7
(градусов) получил:
[
-0.935, 0.356, 0, 0,
-0.356, -0.935, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
]
Это выглядит правильно для меня.
Все преобразования правильные, но они все еще неправильно отображаются на экране.
Обновление 3
Я удалил свой код рисования из вида и установил синий фон вида. Вид определенно поворачивается, сжимается или что-то в этом роде:
Некоторые вещи, которые следует отметить:
- Вид отображается корректно при 90, 180, 270 и 0 градусах.
- Вид исчезает (включен на край) при 45, 135, 225 и 315 градусах.
- Представление выглядит так, как будто оно вращается в 3D с изменением угла от 0 до 360 градусов.