XZ iOS核心動畫高階技巧之座標系和座標系的轉換

2021-07-15 02:16:45 字數 1937 閱讀 9353

座標系

檢視在檢視樹當中也是相對于父檢視按層級關係放置,乙個檢視的position依賴於它父檢視的bounds,如果父檢視發生了移動,它的所有子檢視也會跟著移動。

這樣對於放置檢視會更加方便,因為你可以通過移動根檢視來將它的子檢視作為乙個整體來移動,但是,有時候你需要知道乙個檢視的絕對位置,或是相對於另乙個檢視的位置,而不是它當前父檢視的位置。

檢視的座標系轉換方法

- (nspoint)convertpoint:(nspoint)point toview:(nsview *)view;

- (cgpoint)convertpoint:(cgpoint)point fromview:(uiview *)view;

- (cgrect)convertrect:(cgrect)rect toview:(uiview *)view;

- (cgrect)convertrect:(cgrect)rect fromview:(uiview *)view;

這些方法可以把定義在乙個圖層座標系下的點或者矩形轉換成另乙個圖層座標系下的點或者矩形。

例項預設情況下,

frame

是以父控制項左上角為座標原點

;轉換座標系

:可以轉換座標系原點,改變

frame

的參照點

// 藍色

uiview*blue = [[uiviewalloc]init];

blue.backgroundcolor= [uicolorbluecolor];

blue.frame = cgrectmake(0,50,100,100);

[self

.viewaddsubview:blue];

// 紅色

uiview*red = [[uiviewalloc]init];

red.backgroundcolor= [uicolorredcolor];

red.frame = cgrectmake(100,150,100,100);

[self

.viewaddsubview:red];

// 計算self.red在其他控制項中的位置和尺寸

cgrect newrect = [red convertrect:cgrectmake(50,50,50,50) toview:blue];

// 以字串的形式列印轉換完的座標

nslog(

@"%@"

,nsstringfromcgrect(newrect));

結果列印:

等價於 

cgrect

newframe = [from.superview convertrect:from.frame toview:window];

等價於:toview寫成nil(空)就是window

cgrect

newframe = [from

convertrect

:from.

bounds

toview

:window];

self

.containerview.y 

= cgrectgetmaxy

(newframe);

self

.containerview

.centerx 

= cgrectgetmidx

(newframe);

原理:左邊的from和右

邊的windows相差多少,from的bounds就加上多少

核心動畫之 CAKeyframeAnimation

1.cakeyframeanimation與cabasicanimation同是繼承自 capropertyanimation 2.cakeyframeanimation與cabasicanimation的區別主要是 cabasicanimation只能從乙個數值 fromvalue 變到另乙個數值...

iOS學習 核心動畫之Layer基礎

預設圖層是有陰影的,只不過,是透明的 redview.layer.shadowopacity 1 設定陰影的圓角 redview.layer.shadowradius 10 設定陰影的顏色,把uikit轉換成coregraphics框架,用.cg開頭 redview.layer.shadowcolo...

iOS開發核心動畫之粒子效果

一.示意圖 繪畫出一條線,點選開始有很多粒子繞著線運動,點選重繪消除粒子和線 二.實現 設計思路 自定義乙個view來描述控制器的view,在view載入過程中進行初始化,給view新增手勢 uipangesturerecognizer 將自定義view轉成複製層,建立乙個粒子層,新增到複製層上,並...