CALayer-2

CAScrollLayer
기능 소개
  • CAScrollLayer는 일부 스크롤 가능한 도면층을 표시하는데 이 도면층은 매우 기초적이어서 사용자의 터치 작업에 직접 응답할 수 없고 스크롤 가능한 도면층의 경계를 직접 검사할 수 없기 때문에 경계를 넘어 무한한 스크롤을 피할 수 있다.
  • UIScrollView는 CAScrollLayer가 아닌 도면층 경계를 직접 변경합니다.
  • CAScrollLayer의 스크롤 모드는 수평, 수직 또는 2차원
    //      
    scrollingViewLayer.scrollMode = kCAScrollBoth
    
  • 으로 설정할 수 있습니다.
    다음 경험 규칙은 CAScrollLayer 사용 여부를 결정하는 데 사용됩니다.
  • 경량급 대상을 사용하려면 코드 조작으로 스크롤하기만 하면 된다. CAScrollLayer를 시험할 수 있다.
  • 사용자가 스크롤을 할 수 있도록 하려면 UIScrollView가 더 좋은 선택일 것입니다.
  • 대형 이미지 스크롤: CATiledLayer
  • 고려
    CATextLayer
    기능 소개
  • CATextLayer는 일반 텍스트 또는 속성 문자열을 쉽고 빠르게 렌더링할 수 있습니다.
  • UILAbel과 달리 CATextLayer는 UIFont을 지정할 수 없으며 CTFontRef 또는 CGFontRef만 사용할 수 있습니다.
  • 아래의 코드는 텍스트의 글꼴, 글꼴 크기, 색깔, 정렬, 접기(wrap)와 절단(truncation) 규칙을 완전히 제어할 수 있고 애니메이션 효과도 있다:
  • 코드 예
        func setUpLayer(){
            // 1
            let textLayer = CATextLayer()
            textLayer.frame = someView.bounds
    
            // 2
            var string = ""
            for _ in 1...20 {
            string += "Lorem ipsum dolor sit amet"
            }
    
            textLayer.string = string
    
            //       ,      
            let fontName: CFStringRef = "Noteworthy-Light"
            textLayer.font = CTFontCreateWithName(fontName, fontSize, nil)
    
            // 4
            textLayer.foregroundColor = UIColor.darkGrayColor().CGColor
            //         
            textLayer.wrapped = true
            //   
            textLayer.alignmentMode = kCAAlignmentLeft
            //     contentsScale  
            textLayer.contentsScale = UIScreen.mainScreen().scale
            //      
            textLayer.truncation
            someView.layer.addSublayer(textLayer)
    
        }
    
    : 1。 , contentsScale , 。 contentsScale , 1 Retina 。
    CAGradientLayer
    기능 소개
  • CAGradientLayer는 특히 배경에 적합한 두 가지 이상의 색상을 혼합하는 작업을 단순화합니다.그래디언트를 설정하려면 CGColor 배열과 그래디언트 레이어의 시작과 끝을 표시하는 startPoint와endPoint를 지정해야 합니다.
  • :startPoint endPoint , , 。 x 1 ,y 1 。
    속성 소개
  • CAGradientLayer는 type 속성을 포함하는데 이 속성은 kCAGradientLayerAxial 하나만 선택할 수 있지만 그룹의 각 색에 따라 선형 과도 점차적인 변화가 발생한다.
  • 의 구체적인 의미는 점차적인 과도가 startPoint에서 endPoint까지의 벡터 A 방향으로 발생하고 B와 A를 수직으로 설정하면 각 B의 평행선의 모든 점 색깔이 같다는 것이다.
  • locations 속성은 하나의 배열(요소 값 범위 0에서 1)을 사용하여 그래디언트 레이어 참조colors 순서를 지정하여 다음 변환점 색상의 위치를 가져옵니다.
  • 설정되지 않은 경우 기본적으로 변환 점이 균등하게 지정됩니다.일단 설정하면 colors의 수량과 일치해야 한다. 그렇지 않으면 오류가 발생할 수 있다.

  • 코드 예
        func setUpLayer(){
            let gradientLayer = CAGradientLayer()
            gradientLayer.frame = someView.bounds
            //      
            gradientLayer.colors = [cgColorForRed(209.0, green: 0.0, blue: 0.0),
            cgColorForRed(255.0, green: 102.0, blue: 34.0),
            cgColorForRed(255.0, green: 218.0, blue: 33.0),
            cgColorForRed(51.0, green: 221.0, blue: 0.0),
            cgColorForRed(17.0, green: 51.0, blue: 204.0),
            cgColorForRed(34.0, green: 0.0, blue: 102.0),
            cgColorForRed(51.0, green: 0.0, blue: 68.0)]
            //    
            gradientLayer.startPoint = CGPoint(x: 0, y: 0)
            //    
            gradientLayer.endPoint = CGPoint(x: 0, y: 1)
            someView.layer.addSublayer(gradientLayer)
        }
        func cgColorForRed(red: CGFloat, green: CGFloat, blue: CGFloat) -> AnyObject {
            return UIColor(red: red/255.0, green: green/255.0, blue: blue/255.0, alpha: 1.0).CGColor as AnyObject
        }
    

    CAReplicatorLayer
    기능 소개
  • CAReplicatorLayer는 특정 횟수로 도면층을 복사할 수 있음
  • 각 레이어 복사본의 색상과 위치를 변경할 수 있으며 전체 레이어를 복사한 후 드로잉을 지연시켜 애니메이션 효과를 낼 수 있습니다.
  • 깊이를 이용하여 3차원 효과도 창출할 수 있다.

  • 코드 예
        func setUpLayer(){
            // 1
            let replicatorLayer = CAReplicatorLayer()
            replicatorLayer.frame = someView.bounds
    
            // 2
            //     instanceCount
            replicatorLayer.instanceCount = 30
            //      
            replicatorLayer.instanceDelay = CFTimeInterval(1 / 30.0)
            //    2D
            replicatorLayer.preservesDepth = false
            //       
            replicatorLayer.instanceColor = UIColor.whiteColor().CGColor
    
            // 3、          RGB     (   0,           )
                             , RGB  1.0,         0,                   
            replicatorLayer.instanceRedOffset = 0.0
            replicatorLayer.instanceGreenOffset = -0.5
            replicatorLayer.instanceBlueOffset = -0.5
            //alpha              ,         
            replicatorLayer.instanceAlphaOffset = 0.0
    
            // 4、      ,            
            let angle = Float(M_PI * 2.0) / 30
            replicatorLayer.instanceTransform = CATransform3DMakeRotation(CGFloat(angle), 0.0, 0.0, 1.0)
            someView.layer.addSublayer(replicatorLayer)
    
            // 5、              ,    ,       someView           ,        ,            。
            let instanceLayer = CALayer()
            let layerWidth: CGFloat = 10.0
            let midX = CGRectGetMidX(someView.bounds) - layerWidth / 2.0
            instanceLayer.frame = CGRect(x: midX, y: 0.0, width: layerWidth, height: layerWidth * 3.0)
            instanceLayer.backgroundColor = UIColor.whiteColor().CGColor
            replicatorLayer.addSublayer(instanceLayer)
    
            // 6、        1(   )   0(  )     。
            let fadeAnimation = CABasicAnimation(keyPath: "opacity")
            fadeAnimation.fromValue = 1.0
            fadeAnimation.toValue = 0.0
            fadeAnimation.duration = 1
            fadeAnimation.repeatCount = Float(Int.max)
    
            // 7、         0,               alpha     
            instanceLayer.opacity = 0.0
            instanceLayer.addAnimation(fadeAnimation, forKey: "FadeAnimation")
        }
    

    좋은 웹페이지 즐겨찾기