坑爹的。 為了這個問題折騰了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的約束,而不是邊緣位置的約束。
解決了。 睡覺了..