iOS-CALayer 소개

간단히 소개하다
  • iOS에서 당신이 볼 수 있는 것은 기본적으로 모두 UIView이다. 예를 들어 단추, 텍스트 라벨, 텍스트 입력 상자, 아이콘 등이다. 이것들은 모두 UIView이다.
  • 사실 UIView가 화면에 나타나는 이유는 내부의 한 층 때문이다. UIView 대상을 만들 때 UIView 내부에 자동으로 한 층(즉 CALayer 대상)을 만들고 UIView의 레이어 속성을 통해 이 층에 접근할 수 있다
  • @property(nonatomic,readonly,retain) CALayer *layer;
  • UIView가 화면에 표시될 때drawRect: 방법을 사용하여 그림을 그리고 모든 내용을 자신의 도면층에 그립니다. 그림이 완성되면 시스템은 도면층을 화면으로 복사하여 UIView 표시를 완성합니다
  • 다시 말하면 UIView 자체는 디스플레이 기능을 갖추지 못하고 디스플레이 기능을 가진 것은 내부의 도면층이다.

  • 간단한 사용
    UIView가 표시되는 이유는 내부 CALayer 객체 때문입니다.따라서 이 CALayer 객체를 조작하면 섀도우, 필렛 크기, 프레임 너비와 색상 등 UIView의 일부 인터페이스 속성을 쉽게 조정할 수 있습니다.
  • layer를 통해 테두리의 너비, 색깔, 원각을 설정하고 그림 추가
  • @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~10 )
        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);
    }

    좋은 웹페이지 즐겨찾기