Swift:CAShapeLayer 를 사용 하여 ProgressBar 만 들 기
6081 단어 progress
CAShape Layer 는 iOS 개발 에서 매우 강 한 것 으로 그 를 이용 하여 다양한 모양 을 개발 할 수 있 고 그 위 에 애니메이션 을 추가 할 수 있다.그래서 CAShape Layer 는 프로 그 레 스 바 를 만 드 는 완벽 한 선택 이다.
이 Progress Bar 는 어떤 거 예요?
우리 가 만 들 려 고 하 는 ProgressBar 는 먼저 어떤 모양 을 갖 춘 다음 에 이 모양 은 계속 애니메이션 을 만 들 고 있다.앱 의 네트워크 요청 이나 정보 불 러 오기 가 완 료 될 때 까지 숨 깁 니 다.이 모양 은 Safari 가 웹 페이지 를 불 러 올 때 처럼 수평 선 일 수도 있 고 동그라미 일 수도 있 습 니 다.한 마디 로 하면 CAShape Layer 로 필요 한 모양 을 만 들 고 그 위 에 애니메이션 을 추가 할 수 있 습 니 다.
그리고 애니메이션 을 추가 하 는 것 도 매우 간단 하 다.CABasic Animation 을 만 들 고 이 애니메이션 을 실행 하면 됩 니 다.
예 를 들 면:
let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.fromValue = CGFloat(0.0)
animation.toValue = CGFloat(1.0)
animation.duration = 1.0
animation.delegate = self
animation.removedOnCompletion = false
animation.additive = true
animation.fillMode = kCAFillModeForwards
// progressLayer.addAnimation(animation, forKey: "strokeEnd")
ProgressBar 에서 불 러 오 는 진 도 를 나타 낸다 면 CAShapeLayer 의 strokeEnd 속성 대 가 를 통 해 먼저 할 수 있 습 니 다.layers 는 두 가지 중요 한 속성 이 있 기 때문에 하 나 는 strokeStart 이 고 하 나 는 strokeEnd 입 니 다.이 두 속성 은 선 을 그 리 는 것 이 어디에서 시작 해서 어디 까지 끝 나 는 지 정의 하 는 데 쓰 인 다.이 두 속성의 값 범 위 는 0 에서 1 이 므 로 진 도 를 정확하게 표시 하기 위해 서 입 니 다.너 는 시작 과 끝 의 백분율 을 잘 계산 해 야 한다.
코드 를 써 보도 록 하 겠 습 니 다.
앞에서 말 한 바 와 같이 먼저 ProgressBar 의 모양 을 보 여 주 는 CAShape Layer 가 필요 합 니 다.
UIBezierPath(arcCenter: centerPoint, radius: CGRectGetWidth(bounds) / 2 - 30.0, startAngle: startAngle, endAngle: endAngle, clockwise: true)
bounds 는:
let bounds = CGRectMake(10, 10, UIScreen.mainScreen().bounds.width - 20, UIScreen.mainScreen().bounds.height - 20)
우선,UIBezierPath 로 원 을 그립 니 다.이 원심 은 bounds 가 정 한 범위 의 중심 에 있 습 니 다.반경 은 바로 이 상자 의 너비 에서 30.0 을 뺀 것 이다.
모든 코드 를 보 세 요:
var progressLayer = CAShapeLayer()
progressLayer.frame = bounds
progressLayer.path = UIBezierPath(arcCenter: centerPoint, radius: CGRectGetWidth(bounds) / 2 - 30.0, startAngle: startAngle, endAngle: endAngle, clockwise: true).CGPath
progressLayer.backgroundColor = UIColor.clearColor().CGColor
progressLayer.fillColor = UIColor.clearColor().CGColor
progressLayer.strokeColor = UIColor.lightGrayColor().CGColor
progressLayer.lineWidth = 4.0
progressLayer.strokeStart = 0.0
progressLayer.strokeEnd = 0.0
progressLayer 에 노선 을 설정 할 때 주어진 노선 의 CGPath 가 필요 합 니 다.이곳 은 일부 밑바닥 의 물건 이 므 로 잠시 언급 하지 않 는 다.하지만 기억 해 야 한다.fillColor 는 layer 의 path 로 둘러싸 인 범위 내 에서 어떤 색 을 채 우 는 지 말 합 니 다.다른 속성 은 이해 하기 쉬 워 요.
이 럴 때 progressLayer 를 self.view.layer 에 추가 하고 코드 를 실행 합 니 다.너 는 lightGray Color 의 색깔 의 동 그 라 미 를 볼 수 있 을 것 이다.
이 럴 때 는 우리 가 애니메이션 을 추가 해 야 한다.
let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.fromValue = CGFloat(0.0)
animation.toValue = CGFloat(1.0)
animation.delegate = self
animation.duration = 1.0
animation.delegate = self
animation.removedOnCompletion = false
animation.additive = true
animation.fillMode = kCAFillModeForwards
progressLayer.addAnimation(animation, forKey: "strokeEnd")
다시 실행 하면 이 애니메이션 이 나타 납 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
(20)angularJS 오류 이해 및 해결 $apply already in progressangularJS의 $scope.$를 사용한 경우apply() 또는 $scope.$digest (), 우리는 아래와 같은 오류를 만날 수 있습니다. 상황 2: JQuery 코드에서 $scope의 데이터를 수정합니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.