2012-01-18 6 views
1

나는 drawRect로 구현 된 간단한 사용자 정의 UIView (사각형)가 있습니다.사용자 정의 UIView 애니메이션

보기는 두 가지 값에서 가져옵니다. 의 drawRect에서 CurrentValue에와 maxValue를

는 : 얼마나 많은 CurrentValue에 maxValue를의

하는 구형의 높이가 나타내는입니다 :

if(currentValue > maxValue) 
    currentValue = maxValue; 

float scale = currentValue/maxValue; 

//Draw the rect 
CGContextBeginPath(context); 
CGContextMoveToPoint(context, self.bounds.origin.x, self.bounds.size.height); 
CGContextAddLineToPoint(context, self.bounds.size.width, self.bounds.size.height); 
CGContextAddLineToPoint(context, self.bounds.size.width, self.bounds.size.height-(self.bounds.size.height*scale)); 
CGContextAddLineToPoint(context, self.bounds.origin.x, self.bounds.size.height-(self.bounds.size.height*scale)); 
CGContextClosePath(context); 

CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); 
CGContextFillPath(context); 
CGContextStrokePath(context); 

나는 CurrentValue에 등을 변경하는 UISlider로 설정에게의 ViewController를했습니다 변경 될 때마다 setNeedsDisplay가 호출됩니다. 이 부분은 잘 작동합니다. 슬라이더를 사용할 때 rect는 높이를 계획대로 정확하게 변경합니다.

내 질문은 .. 나는 애니메이션 사이의 전환을 원합니다. 가장 좋은 방법은 무엇입니까?

감사

답변

1

사용자 지정 드로잉이있는 UIView 대신보기 레이어에 CAShapeLayer 개체를 추가 할 수 있습니다. CAShapeLayer 클래스를 사용하면 속성을 그리거나 그리는 경로를 지정할 수 있습니다. 또한 속성을 쉽게 변경할 수 있습니다.

보기가 단색으로 채워진 경우 두 번째 옵션은보기의 프레임을 조정하거나 적절한 높이를 얻기 위해 적절한 아핀 변환을 설정하는 것입니다. 두 속성은 모두 UIView 클래스의 애니메이션 메서드를 사용하여 쉽게 애니메이션화 할 수 있습니다. 당신이 정말로 단지 코어 애니메이션 레이어 (같은 CAShapeLayer 또는 CAGradientLayer)에 의해 그려 질 수있는 간단한 모양을 원하는 경우에

+0

감사합니다. 간단한 UIView rect를 사용하고 UIView animateWithDuration .. 대신 프레임을 변경 한 다음 컨트롤러가 모든 작업을 수행하도록했습니다. – Jach0

0

당신은 아마 코어 애니메이션이 작업을 수행 할 수 있습니다. 관련 문서는 Apple의 developer site에 있습니다. 이 other SO question에는 iOS가 포함 된 Core Animation의 링크가 제공됩니다.

1

, 당신은 단지 코어 애니메이션 레이어를 사용해야하며 CABasicAnimation은 레이어의 프레임을 애니메이션.

무언가를 더 복잡하게 그리려면 모양에 대한 변경 사항을 애니메이션으로 적용하려는 경우 더 많은 작업을 수행해야합니다. 현재 및 최종 값을 저장하고 값의 속도를 저장하는 객체 속성 또는 인스턴스 변수를 제공해야합니다. CADisplayLink 개체를 만들어 애니메이션 메서드 호출을 유도해야합니다. 애니메이션 메서드는 경과 한 시간을 기준으로 현재 값을 업데이트 한 다음 setNeedsDisplay으로 호출해야합니다.