layer和3D仿射變換,layer3d仿
1、視圖的顯示基於圖層,通過控製圖層同樣能控制顯示效果,擷取當前的視圖的layer,並為其增加圓角邊框。
//設定layer邊框的寬度為2 view.layer.borderWidth=2; //如果需要為layer添加顏色需要轉換為CGColor對象 view.layer.borderColor=[UIColor greenColor].CGColor; //將邊框的圓角半徑設定為10 view.layer.cornerRadius=10;
2、通過layer設定視圖的陰影
// 1 設定當前的陰影顏色 view.layer.shadowColor=[UIColor blackColor].CGColor; // 2 設定當前凸出來的陰影,通過該方法來控制當前陰影凸出來的程度,從而達到所需要的效果 view.layer.shadowOffset=CGSizeMake(5, 5); // 3 設定當前的透明度view.layer.shadowOpacity=0.5;
3、自訂layer
CALayer *layer=[CALayer layer]; layer.borderColor=[UIColor redColor].CGColor; layer.borderWidth=2; layer.cornerRadius=10; layer.backgroundColor=[UIColor redColor].CGColor;layer.bounds=CGRectMake(0, 0, 200, 100); //設定position控制當前位置layer.position=CGPointMake(100, 100);//設定錨點用來控制position的位置,錨點的大小範圍為0-1,可以理解為按照比例來定位元影像層的位置點,將該點定位到position屬性所指的位置上去,這樣通過兩個屬性便能很好的控制當前圖層的位置layer.anchorPoint=CGPointMake(0, 0);//將當前的圖層增加到當前顯示的圖層 [self.view.layer addSublayer:layer];
4、layer 3D仿射變換
1、平移
1.1、3D平移分為X Y Z 三維,分別設定數值會沿著設定的方向平移
t1:X軸位移位置,往下為正數。
t2:Y軸位移位置,往右為正數。
t3:Z軸位移位置,往外為正數。
NSValue * nav=[NSValue valueWithCATransform3D: CATransform3DMakeTranslation(t1, t2, t3)];[view.layer setValue:nav forKey:@"transform"];
1.2、通過KVC賦值,如下表格所示
//沿著x方向平移100[view.layersetValue:@(100) forKeyPath:@"transform.translation.x"];//沿著y方向平移100[view.layersetValue:@(100) forKeyPath:@"transform.translation.y"];//沿著z方向平移100[view.layersetValue:@(100) forKeyPath:@"transform.translation.z"];
2、旋轉
2.1、旋轉有四個參數,第一個為旋轉的角度,為弧度表示,後面三個值分別對應三個軸,可以設定圍繞不同軸旋轉
x:沿著X軸方向旋轉,值範圍-1 和1之間
y:沿著Y軸方向旋轉,值範圍-1和1之間
z:沿著Z軸方向旋轉,值範圍-1和1之間
[UIView animateWithDuration:1 animations:^{ view.layer.transform=CATransform3DMakeRotation(M_PI, 0, 0, -1); }];
2.2、通過KVC賦值
//沿著z軸旋轉[view.layer setValue:@(M_PI_2) forKeyPath:@"transform.rotation.z"];//沿著x軸旋轉[view.layer setValue:@(M_PI_2) forKeyPath:@"transform.rotation.x"];
3、縮放
3.1、三個參數分別為沿著每個軸縮放的倍數,順序依次為 X Y Z三維。
view.layer.transform=CATransform3DMakeScale(1, 1.5, 1);
3.2、通過KVC賦值
//沿著x軸方向放大1.5倍數[view.layer setValue:@(1.5)forKeyPath:@"transform.scale.x"];//沿著y軸方向放大1.5倍數[view.layer setValue:@(1.5)forKeyPath:@"transform.scale.y"];//沿著z軸方向放大1.5倍數[view.layer setValue:@(1.5)forKeyPath:@"transform.scale.z"];