iOS开发-CGAffineTransformMakeRotation改变了中心解决办法

坑爹的。  为了这个问题折腾了2个小时。 恼..


今天在写一个时钟demo的时候, 时针的旋转用到了CGAffineTransformMakeRotation, 按理说. 图像的旋转是以图像本身的中心(center)为锚点的, 也就是在旋转过程中, 它的中心是固定的。 就和我们时针的效果一样。

比如我下面的时针, 分针, 秒针旋转的代码:

    NSDate *today = [NSDate date];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    unsigned flags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents *todayComponents = [calendar components:flags
                                                    fromDate:today];
    
    int hour = [todayComponents hour];
    int min = [todayComponents minute];
    int sec = [todayComponents second];
    
    float fineHour = (hour % 12) + min /60.0;
    
    hourHand.transform = CGAffineTransformMakeRotation(M_PI * 2 * fineHour / 12.0);
    minuteHand.transform = CGAffineTransformMakeRotation(M_PI * 2 * min / 60.0);
    secondHand.transform = CGAffineTransformMakeRotation(M_PI * 2 * sec / 60.0);

代码是没问题的。

但是, 运行起来的时候, 发现旋转过程中中心变了。 出现了明显的位移...

折腾了半天, 原来是自动布局搞的鬼.. 蛋疼。

解决的办法:

1. 关掉自动布局。

2.你应当设置center的约束,而不是边缘位置的约束。



解决了。 睡觉了..

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。