<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 錨點 ????之前提到過,視圖的`center`屬性和圖層的`position`屬性都指定了`anchorPoint`相對于父圖層的位置。圖層的`anchorPoint`通過`position`來控制它的`frame`的位置,你可以認為`anchorPoint`是用來移動圖層的*把柄*。 ????默認來說,`anchorPoint`位于圖層的中點,所以圖層的將會以這個點為中心放置。`anchorPoint`屬性并沒有被`UIView`接口暴露出來,這也是視圖的position屬性被叫做“center”的原因。但是圖層的`anchorPoint`可以被移動,比如你可以把它置于圖層`frame`的左上角,于是圖層的內容將會向右下角的`position`方向移動(圖3.3),而不是居中了。 ![](https://box.kancloud.cn/2015-12-24_567bc1ee649bd.png) 圖3.3 改變`anchorPoint`的效果 ????和第二章提到的`contentsRect`和`contentsCenter`屬性類似,`anchorPoint`用*單位坐標*來描述,也就是圖層的相對坐標,圖層左上角是{0, 0},右下角是{1, 1},因此默認坐標是{0.5, 0.5}。`anchorPoint`可以通過指定x和y值小于0或者大于1,使它放置在圖層范圍之外。 ????注意在圖3.3中,當改變了`anchorPoint`,`position`屬性保持固定的值并沒有發生改變,但是`frame`卻移動了。 ????那在什么場合需要改變`anchorPoint`呢?既然我們可以隨意改變圖層位置,那改變`anchorPoint`不會造成困惑么?為了舉例說明,我們來舉一個實用的例子,創建一個模擬鬧鐘的項目。 ????鐘面和鐘表由四張圖片組成(圖3.4),為了簡單說明,我們還是用傳統的方式來裝載和加載圖片,使用四個`UIImageView`實例(當然你也可以用正常的視圖,設置他們圖層的`contents`圖片)。 ![](https://box.kancloud.cn/2015-12-24_567bc1ee82e2b.png) 圖3.4 組成鐘面和鐘表的四張圖片 ????鬧鐘的組件通過IB來排列(圖3.5),這些圖片視圖嵌套在一個容器視圖之內,并且自動調整和自動布局都被禁用了。這是因為自動調整會影響到視圖的`frame`,而根據圖3.2的演示,當視圖旋轉的時候,`frame`是會發生改變的,這將會導致一些布局上的失靈。 ????我們用`NSTimer`來更新鬧鐘,使用視圖的`transform`屬性來旋轉鐘表(如果你對這個屬性不太熟悉,不要著急,我們將會在第5章“變換”當中詳細說明),具體代碼見清單3.1 ![](https://box.kancloud.cn/2015-12-24_567bc1eeab49d.png) 圖3.5 在Interface Builder中布局鬧鐘視圖 清單3.1?Clock ~~~ @interface ViewController () @property (nonatomic, weak) IBOutlet UIImageView *hourHand; @property (nonatomic, weak) IBOutlet UIImageView *minuteHand; @property (nonatomic, weak) IBOutlet UIImageView *secondHand; @property (nonatomic, weak) NSTimer *timer; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //start timer self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick) userInfo:nil repeats:YES]; ? //set initial hand positions [self tick]; } - (void)tick { //convert time to hours, minutes and seconds NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSUInteger units = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; NSDateComponents *components = [calendar components:units fromDate:[NSDate date]]; CGFloat hoursAngle = (components.hour / 12.0) * M_PI * 2.0; //calculate hour hand angle //calculate minute hand angle CGFloat minsAngle = (components.minute / 60.0) * M_PI * 2.0; //calculate second hand angle CGFloat secsAngle = (components.second / 60.0) * M_PI * 2.0; //rotate hands self.hourHand.transform = CGAffineTransformMakeRotation(hoursAngle); self.minuteHand.transform = CGAffineTransformMakeRotation(minsAngle); self.secondHand.transform = CGAffineTransformMakeRotation(secsAngle); } @end ~~~ ????運行項目,看起來有點奇怪(圖3.6),因為鐘表的圖片在圍繞著中心旋轉,這并不是我們期待的一個支點。 ![](https://box.kancloud.cn/2015-12-24_567bc1eeeb615.png) 圖3.6 鐘面,和不對齊的鐘指針 ????你也許會認為可以在Interface Builder當中調整指針圖片的位置來解決,但其實并不能達到目的,因為如果不放在鐘面中間的話,同樣不能正確的旋轉。 ????也許在圖片末尾添加一個透明空間也是個解決方案,但這樣會讓圖片變大,也會消耗更多的內存,這樣并不優雅。 ????更好的方案是使用`anchorPoint`屬性,我們來在`-viewDidLoad`方法中添加幾行代碼來給每個鐘指針的`anchorPoint`做一些平移(清單3.2),圖3.7顯示了正確的結果。 清單3.2 ~~~ - (void)viewDidLoad { [super viewDidLoad]; // adjust anchor points self.secondHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f); self.minuteHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f); self.hourHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f); // start timer } ~~~ ![](https://box.kancloud.cn/2015-12-24_567bc1ef293b2.png) 圖3.7 鐘面,和正確對齊的鐘指針
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看