2013-06-28 10 views
3

진행 막대의 기본 선 그리기 애니메이션을 구현했습니다. 선의 끝이 둥근 모서리가 있습니다. 선의 시작 부분에 선을 그릴 때 둥근 모 그것의 정사각형. 아래 코드는 내가 사용하고있는 코드는 무엇입니까?CAShapeLayer LineCap이 CABasic 애니메이션 끝 부분에 적합하지 않습니다.

CAShape 계층 코드 :

CAShapeLayer *lineLayer = [[CAShapeLayer alloc] init]; 

[lineLayer setFrame: CGRectMake(0, 
           0, 
           wifisyncView.popUpView.frame.size.width, 
           wifisyncView.popUpView.frame.size.height)]; 

[lineLayer setPath: [linePath CGPath]]; 
lineLayer.lineWidth = 9.0f; 
lineLayer.strokeEnd = 9.0f; 
lineLayer.fillColor = [[UIColor orangeColor] CGColor]; 
lineLayer.lineCap = kCALineCapRound; 
[lineLayer setStrokeColor:[[UIColor orangeColor] CGColor]]; 
[lineLayer setMasksToBounds:YES]; 
lineLayer.cornerRadius = 30.0f; 

CABASIC 애니메이션 코드 : 첨부

CABasicAnimation *drawAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; 
drawAnimation.duration   = 5.0; // "animate over 5 seconds " 
drawAnimation.repeatCount   = 1.0; // Animate only once.. 
drawAnimation.removedOnCompletion = NO;// Remain stroked after the animation.. 
drawAnimation.fillMode = kCAFillModeForwards; 

// Animate from no part of the stroke being drawn to the entire stroke being drawn 
drawAnimation.fromValue = [NSNumber numberWithFloat:0.0f]; 
drawAnimation.toValue = [NSNumber numberWithFloat:1.0f]; 

// Experiment with timing to get the appearence to look the way you want 
drawAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 
drawAnimation.delegate = self; 
// Add the animation to the circle 
[lineLayer addAnimation:drawAnimation forKey:@"drawLineAnimation"]; 

이미지 : 나는 당신의 코드에서 어떤 실수를 찾을 해달라고 enter image description here

답변

3

. 새 프로젝트를 만들고 viewDidLoad에 코드를 붙여 넣고 잘 작동합니다. 참조 용 코드.

UIBezierPath *linePath = [UIBezierPath bezierPath]; 
[linePath moveToPoint:CGPointMake(100, 100)]; 
[linePath addLineToPoint:CGPointMake(500, 100)]; 

CAShapeLayer *lineLayer = [[CAShapeLayer alloc] init]; 
[lineLayer setFrame:self.view.bounds]; 
[lineLayer setPath: [linePath CGPath]]; 
lineLayer.lineWidth = 9.0f; 
lineLayer.strokeEnd = 9.0f; 
lineLayer.fillColor = [[UIColor orangeColor] CGColor]; 
lineLayer.lineCap = kCALineCapRound; 
[lineLayer setStrokeColor:[[UIColor orangeColor] CGColor]]; 
[lineLayer setMasksToBounds:YES]; 
lineLayer.cornerRadius = 30.0f; 

[self.view.layer addSublayer:lineLayer]; 

CABasicAnimation *drawAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; 
drawAnimation.duration   = 5.0; // "animate over 5 seconds " 
drawAnimation.repeatCount   = 1.0; // Animate only once.. 
drawAnimation.removedOnCompletion = NO;// Remain stroked after the animation.. 
drawAnimation.fillMode = kCAFillModeForwards; 

// Animate from no part of the stroke being drawn to the entire stroke being drawn 
drawAnimation.fromValue = [NSNumber numberWithFloat:0.0f]; 
drawAnimation.toValue = [NSNumber numberWithFloat:1.0f]; 

// Experiment with timing to get the appearence to look the way you want 
drawAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 
drawAnimation.delegate = self; 
// Add the animation to the circle 
[lineLayer addAnimation:drawAnimation forKey:@"drawLineAnimation"]; 

난 당신이

[lineLayer setFrame: CGRectMake(0, 
           0, 
           wifisyncView.popUpView.bounds.size.width, 
           wifisyncView.popUpView.bounds.size.height)]; 
+2

내 위의 코드는 잘 작동에

[lineLayer setFrame: CGRectMake(0, 0, wifisyncView.popUpView.frame.size.width, wifisyncView.popUpView.frame.size.height)]; 

을 변경하려고한다고 생각합니다. 그냥 내가 CAShapeLayer 생성하기 전에 UIBezierPath에 대한 Path 문을 닫았다는 것을 알아 냈습니다. [linePath closePath]가 삭제되었으며 모두 정상적으로 작동합니다. –

+0

@ Karthik_S 업데이트 주셔서 감사합니다. – iCoder

+0

전화하세요. 나는 경로가 "닫히는"것이 실제로 의미하는 것을 잊어 버렸기 때문에 단순한 라인 경로를 닫은 것과 같은 문제가있었습니다. 제 경우에는 처음으로 라인을 똑바로 그려서 애니메이션이 엉망이되었습니다. – LucasTizma