iOS開發-CGAffineTransformMakeRotation改變瞭中心解決辦法 – iPhone手機開發技術文章 iPhone軟體開發教學課程

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

解決瞭。 睡覺瞭..

發佈留言