iOS-CALayer 소개
간단한 사용
UIView가 표시되는 이유는 내부 CALayer 객체 때문입니다.따라서 이 CALayer 객체를 조작하면 섀도우, 필렛 크기, 프레임 너비와 색상 등 UIView의 일부 인터페이스 속성을 쉽게 조정할 수 있습니다.
@interface YYViewController ()
@property (weak, nonatomic) IBOutlet UIView *customView;
@end
@implementation YYViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// 20
self.customView.layer.borderWidth=5;
//
self.customView.layer.borderColor=[UIColor blackColor].CGColor;
// layer
self.customView.layer.cornerRadius=20;
// view image,contents
self.customView.layer.contents=(id)[UIImage imageNamed:@"me"].CGImage;
}
@end
설명:contents는 id 형식으로 내용을 받아들일 수 있습니다. 위의 실례는layer에 그림을 보여 줍니다. 자세히 살펴보면 네 개의 원각 부분에 한 개의 각이 드러난 것을 발견할 수 있습니다.
이유: 설정된 이미지는 주 레이어가 아닌 하위 레이어에 표시됩니다.기본 레이어에 필렛을 설정할 뿐 하위 레이어에는 필렛을 설정하지 않았습니다.해결 방법:self.customView.layer.masksToBounds=YES;
주의: layer에서 UI 프레임워크를 받아들일 수 없습니다. 변환이 필요합니다.예컨대.CGImage 등.
2. 섀도우 설정
섀도우 설정, 섀도우 색상 shadow Color 뿐만 아니라 섀도우의 오프셋 위치 shadow Offset 투명도 shadow Opacity도 설정해야 합니다.
오프셋 위치를 설정하지 않으면 그림자와layer가 완전히 중첩되고 기본 투명도는 0 (즉 완전 투명) 이기 때문이다.
- (void)viewDidLoad
{
[super viewDidLoad];
//
self.customView.layer.shadowColor=[UIColor blackColor].CGColor;
// , ,
self.customView.layer.shadowOffset=CGSizeMake(15, 5);
// (0~1 ,0 )
self.customView.layer.shadowOpacity=0.6;
}
확장성
masksToBounds=YES를 설정하면 그림 원각 효과를 표시할 수 있지만 안타깝게도 이 속성을 설정한 후에는 음영 효과를 설정할 수 없습니다.
원인:masksToBounds=YES는 외곽선을 표시할 수 없다는 것을 의미하고 음영은 외곽선으로 그려져 두 설정이 모순되었다.이 문제를 해결하려면 생각을 바꾸어도 무방하다. 두 개의 크기가 같은 도층을 사용하고 아래의 도층은 음영을 그리는 것을 책임지고 위의 도층은 그림을 표시하는 데 사용한다.
해결 방법: 컨테이너 레이어(imageView)와 동일한 속성을 가진 섀도우 레이어를 추가합니다.섀도우를 설정합니다.
UIView를 상속하는 모든 레이어 속성은
imageView 회전 호 설정하기
@implementation YYViewController
@interface YYViewController ()
@property (weak, nonatomic) IBOutlet UIView *customView;
@property (weak, nonatomic) IBOutlet UIImageView *iconView; @end
- (void)viewDidLoad
{
[super viewDidLoad];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// uiview (2D )
// self.iconView.transform=CGAffineTransformMakeTranslation(0, -100);
// layer (3D ,x,y,z )
// self.iconView.layer.transform=CATransform3DMakeTranslation(100, 20, 0);
// KVC
// NSValue *v=[NSValue valueWithCATransform3D:CATransform3DMakeTranslation(100, 20, 0)];
// [self.iconView.layer setValue:v forKeyPath:@"transform"];
// // ,
// // x 100
// [self.iconView.layer setValue:@(-100) forKeyPath:@"transform.translation.x"];
//
self.iconView.layer.transform=CATransform3DMakeRotation(M_PI_4, 1, 1, 0.5);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.