2014-12-19 1 views
1

내 응용 프로그램에서 모든 종류의 정보를 표시하려면 UIView 하위 클래스를 사용하고 있습니다. 이보기가 둥글게 보이길 바래서보기의 cornerRadiuslayer에서 self.bounds.size.width/2으로 설정합니다.UIView의 프레임 변경 및 cornerRadius 업데이트

애니메이션을 시도 할 때까지 예상대로 작동합니다. 나는 예를 들어, UIView.animateWithDuration 사용하여 내보기 애니메이션 :

UIView.animateWithDuration(0.2, animations: {() -> Void in 

    self.myView.frame = CGRectInset(self.myView.frame, -20, -20); 

}) { (done) -> Void in 

} 
CornerRadius를 변경이와 애니메이션되지 않기 때문에 나는, 같은 애니메이션의 층의 CornerRadius를 (또는 별도의 애니메이션을 업데이트하는 내보기를 원하는

. animateWithDuration

여기

내가 이미 뭘하려 :

  • 서브 클래스 원을 그리고 단지 MyView.layer의 상단에 그것을 넣어의 CALayer,
  • . 두 경계가 아직 업데이트되지 않았거나 추가의 CALayer의 크기 조정이 다른 애니메이션이 완료되기 전에 수행되기 때문에, UIView.animatewithDuration

를 실행 동안 CABasicAnimation 를 수행하지만 그들 모두 나사 결과를 초래할 . 나는 그것이 그것이 부드러운 전이가되기를 원한다.

+0

봅니다 네의 – Janmenjaya

+0

가능한 중복을 = [UIView의 animateWithDuration이 CornerRadius를 변화 애니메이션을하지 않는다] (http://stackoverflow.com/questions/5948167/uiview-animatewithduration-doesnt - 애니메이션 - 모서리 반 - 유사) – Logan

답변

3
func changeBounds() 
{ 
    let animation = CABasicAnimation() 
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) 
    animation.fromValue = NSValue(CGRect: self.theView.frame) 
    animation.toValue = NSValue(CGRect: CGRectInset(self.theView.frame, 40, 40)) 
    animation.duration = 1.0 
    self.theView.layer.addAnimation(animation, forKey: "bounds") 

    CATransaction.begin() 
    CATransaction.setDisableActions(true) 
    self.theView.layer.frame = CGRectInset(self.theView.frame, 40, 40) 
    CATransaction.commit() 
} 

func changeCornerRadius() 
{ 
    let animation = CABasicAnimation(keyPath:"cornerRadius") 
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) 
    animation.fromValue = 0 
    animation.toValue = self.theView.frame.size.width/2 
    animation.duration = 1.0 
    self.theView.layer.addAnimation(animation, forKey: "cornerRadius") 
    self.theView.layer.cornerRadius = self.theView.frame.size.width/2 
} 

이것은 나를 위해 일하는 것처럼 보입니다.

self.changeBounds() 
self.changeCornerRadius() 

"프레임"대신 "경계"로 애니메이션 키를 설정하십시오. 또는이 두 애니메이션을 애니메이션 그룹에 추가 할 수 있습니다.

0

이 확장명을 사용하여 모퉁이 반지름 변경에 애니메이션을 적용 할 수 있습니다. "경계에 클립"뷰의 설정에 의해

extension UIView 
{ 
    func addCornerRadiusAnimation(from: CGFloat, to: CGFloat, duration: CFTimeInterval) 
    { 
     let animation = CABasicAnimation(keyPath:"cornerRadius") 
     animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) 
     animation.fromValue = from 
     animation.toValue = to 
     animation.duration = duration 
     self.layer.addAnimation(animation, forKey: "cornerRadius") 
     self.layer.cornerRadius = to 
    } 
}