AffineTransform a CGPoint

Я проводил исследования все утро. Пока не повезло. Я пытаюсь повернуть CGPoint вокруг центра моего представления.

Вот что я делаю для UIBezierPath:

CGRect bounds = self.bounds; // might want to use CGPathGetPathBoundingBox
CGPoint center = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, center.x, center.y);
transform = CGAffineTransformRotate(transform, DEGREES_TO_RADIANS(degreesOfRotation));
transform = CGAffineTransformTranslate(transform, -center.x, -center.y);
currentLayer.path = CGPathCreateCopyByTransformingPath(pathTwo.CGPath, &transform);

Работает отлично. Я нашел этот пост Что лучше способ повернуть CGPoint на сетке? и это просто не сработало.

Мне действительно нужен способ повернуть CGPoint вокруг центра моих границ.

Есть идеи?


person digit    schedule 10.03.2018    source источник


Ответы (1)


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

CGRect bounds = self.bounds;
CGPoint center = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, center.x, center.y);
transform = CGAffineTransformRotate(transform, DEGREES_TO_RADIANS(degreesOfRotation));
transform = CGAffineTransformTranslate(transform, -center.x, -center.y);

CGPoint point = CGPointMake(bounds.size.width - 10, center.y);  // some point
CGPoint point2 = CGPointApplyAffineTransform(point, transform); // some point rotated about the center of the view
person user3386109    schedule 11.03.2018