iOS錨點的講解
在CALayer中有一個很重要的概念,就是錨點,錨點是針對CALayer來說的,錨點到底是什麼呢?讓我們看看錨點到底是什麼?一下都是針對CALayer來說的。
首先我們先說一下什麼CALayer,CALayer就是一個圖層,可以讓我們看見的東西,但是他不具有事件,為了讓我們既能看得見又能操作,所以就在繼承UIResponder來擴充套件了一個CALayer,這就是UIView,所以UIView有一個CALayer的原因,我們用的button和UIIimageView,UILabel等等很多控制元件都是繼承UIView的,這樣我們看得見又有事件,說白了就是在事件上加了一層圖層,當我們多動一個控制元件的時候,僅僅改變控制元件的center是不行的,同時我們需要改變這個控制元件的layer的錨點。
我們在xib中拖一個UIImageView,而UIImageView的位置時從父檢視的左上角0,0點開始計算的,但是UIImageView的center的計算是從父檢視左上角0,0點開始的,
UIImageView的錨點是針對layer來說的,錨點是相對於UIImageView自身的,也是position所指的位置,預設就是(0.5,0.5),就是UIImageView自己的中心,以錨點為參考點,相對父檢視的位置就是center,因為是(0.5,0.5)嘛,當我們點選圖片時,我們點選的在UIImageView上的位置和UIImageView自身大小相比的值,讓這個值作為錨點的位置,改變這個位置可以在拖動、縮放等操作時,不會出現閃跳的現象,原因就是錨點變了,錨點變了,原來的UIImageView的Center也要改變,記住center是相對父檢視的,要從父檢視中拿。讓相對父檢視的center和相對自身的錨點重合,就完成了。簡單的說錨點就是UIImageView在父檢視中位置計算的參考點,以這個點來計算UIImageView在父檢視中的位置。
- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
//UIGestureRecognizerStateBegan意味著手勢已經被識別
if (gestureRecognizer.state ==UIGestureRecognizerStateBegan)
{
//手勢發生在哪個view上
UIView *piece = gestureRecognizer.view;
//獲得當前手勢在view上的位置。
CGPoint locationInView = [gestureRecognizerlocationInView:piece];
piece.layer.anchorPoint =CGPointMake(locationInView.x / piece.bounds.size.width, locationInView.y / piece.bounds.size.height);
//根據在view上的位置設定錨點。
//防止設定完錨點過後,view的位置發生變化,相當於把view的位置重新定位到原來的位置上。
CGPoint locationInSuperview = [gestureRecognizerlocationInView:piece.superview];
piece.center = locationInSuperview;
}
}
//縮放事件
- (void)scalePiece:(UIPinchGestureRecognizer *)gestureRecognizer
{
[selfadjustAnchorPointForGestureRecognizer:gestureRecognizer];
if ([gestureRecognizerstate] ==UIGestureRecognizerStateBegan || [gestureRecognizerstate] ==UIGestureRecognizerStateChanged)
{
[gestureRecognizer view].transform =CGAffineTransformScale([[gestureRecognizerview]transform], [gestureRecognizerscale], [gestureRecognizerscale]);
[gestureRecognizer setScale:1];
}
}
相關文章
- 『IOS』使用優雅的錨點開發iosiOS
- 錨點的使用
- HTML 錨點定位HTML
- 鄭州iOS點 - 點哥講iOS的時間管理iOS
- jQuery-錨點動畫jQuery動畫
- angular中使用a標籤的錨點Angular
- 微信小程式-錨點定位微信小程式
- css 錨點定位 -- scrollIntoViewCSSView
- html中的錨點介紹和使用HTML
- 有關於錨點的程式碼實現
- angularjs 錨點操作服務 $anchorScrollAngularJS
- iOS上的pthread的講解內容iOSthread
- 地圖自定義錨點+覆蓋物地圖
- Javascript陣列的知識點講解JavaScript陣列
- 潘柱廷:網路安全需要堅實的“錨點”
- jQuery實現的錨點平滑定位程式碼例項jQuery
- 直播軟體app開發,VUE解決錨點重新整理問題APPVue
- iframe錨點定位在firefox火狐瀏覽器下失效解決方案Firefox瀏覽器
- 使用錨點跳轉時出現位置偏差原因及解決辦法
- CUUG ORACLE檢查點講解Oracle
- Android Fragment用法知識點的講解AndroidFragment
- 玩轉 iOS 開發:NSURLSession 講解 (一)iOSSession
- DispatcherDervlet類中重點方法講解
- scrollIntoView()實現通訊錄功能-錨點定位View
- cocos2d anchor point 錨點解析(轉)
- 簡單講解蘋果ios企業簽名蘋果iOS
- iOS自定義轉場動畫實戰講解iOS動畫
- iOS 高效新增圓角效果實戰講解iOS
- Swoole 系列之二(Websocket 要點講解)Web
- Halcon斑點分析官方示例講解
- vertical-align知識點講解
- ant design 錨點採坑一 無滾動效果
- 從錨點到關鍵點,最新的目標檢測方法發展到哪了
- iOS下的點選事件失效解決方法iOS事件
- ios GCD 死鎖幾個案例 詳細講解iOSGC
- iOS多執行緒講解一之NSThreadiOS執行緒thread
- iOS史上最詳細的動畫講解-載入等待動畫(一)iOS動畫
- 在CocosStudio中自建的檔案中沒有錨點的選項