2014-12-12 1 views
0

사용자 지정 UIView 개체의 계층 구조가 있습니다. 리프보기를 선택할 수 있습니다. 그들은 그것에 isSelected 속성이 있습니다. 이 값을 YES으로 설정하면 뷰가 내 "선택한"색으로 즉시 변경된 다음 크기가 일시적으로 증가하고 원래 크기로 돌아갑니다. 정말 무슨 일이 일어나고 있는지 보려고했기 때문에, 내가 여기에 시간과 변위를 과장 한사용자 정의보기 선택 항목에 부풀음 및 색상 변경을 적용하는 방법은 무엇입니까?

self.backgroundColor = [UIColor colorWithRed: 0 green: 0.5 blue: 1 alpha: 1]; 
CGRect currentFrame = self.frame; 
CGRect bigFrame = CGRectInset(currentFrame, -50, -50); 
[UIView animateWithDuration: 0.4 animations:^{ 
    self.frame = bigFrame; 
} completion:^(BOOL finished) { 
    if (finished) { 
     [UIView animateWithDuration: 0.4 animations:^{ 
      self.frame = currentFrame; 
     }]; 
    } 
}]; 

: I 다음 코드는 트릭을 할 것 생각했다. 무슨 일이 일어나는가, 색상 변화가 움직이는 것처럼 보이므로, 그것의 기본 백색도 0.93에서 파란색으로 서서히 변화합니다. 또한 크기가 커지지 않습니다. 그것은 삽입물 양만큼 아래로 오른쪽으로 변환 한 다음 모든 방향으로 성장하는 것이 아니라 정상적인 지점으로 돌아가는 것처럼 보입니다.

무엇이 누락 되었습니까?

답변

1

를 사용하여 키 프레임 애니메이션 ... 그래서 같이 :

CAKeyframeAnimation *bounceAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"]; 
// 200 is example side of the big view, but you can apply any formula to it. For example relative to superview, or screen bounds 
CGFloat multiplier = 200/MAX(self.frame.size.height, self.frame.size.width) 
bounceAnimation.values = 
@[@(1 - 0.1 * multiplier, 
    @(1 + 0.3 * multiplier), 
    @(1 + 0.1 * multiplier, 
    @1.0]; 
bounceAnimation.duration = 0.25; 
bounceAnimation.removedOnCompletion = YES; 
bounceAnimation.fillMode = kCAFillModeForwards; 
[self.layer addAnimation:bounceAnimation forKey:@"bounceAnimation"]; 
+0

전에 키 프레임 변형을 사용한 적이 없습니다. 감사! 이것은 대부분 효과가있었습니다. 적어도 예기치 않게 행동하지 않았습니다. 내가 가지고있는 두 가지 질문. 1) 변환을 사용하면 원래 크기에 비해 임시 크기가 증가합니다. 그렇게하면 작은 사람들이 조금씩 튀어 나오게되고, 큰 사람들은 실제로 커지게됩니다. 차라리 프레임의 "처음"이라는 균일 한 픽셀을 갖고 싶습니다. 대체 방법이 있습니까? 원하는 픽셀 오프셋을 얻기 위해 스케일을 역산 할 수 있습니다. 2)'CATransform3D'에 대한 문서를 찾을 수 없습니다. 나는 그들을 변화시키는 기능을 발견했다. 그러나 .scale을 찾으려면 어디로 가야할지 모르겠다. –

+0

프레임을 수행하기 위해 나는'bounds' keyPath로 바꿨다. (분명히, 당신은 레이어의 프레임을 애니메이트하지 않아도되지만, 경계와 위치 등). 그리고'CGRect' 주위에'NSValue' 배열을 만들었습니다. –

+0

이전에 프레임에 따라 바운스 값을 계산하고 업데이트 답변을보고 쉽게 달성 할 수 있습니다. –

0

CGAffineTransformMakeScale은 어떻습니까?

[UIView animateWithDuration: 0.4 animations:^{ 
    // Update 1.3 to what ever works for you 
    self.transform = CGAffineTransformMakeScale(1.3, 1.3); 
} completion:^(BOOL finished) { 
    if (finished) { 
     [UIView animateWithDuration: 0.4 animations:^{ 
      self.transform = CGAffineTransformMakeScale(1.0, 1.0); 
     }]; 
    } 
}]; 

https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGAffineTransform/#//apple_ref/c/func/CGAffineTransformMakeScale

+0

흠 ... 다른 결과를 생성합니다. 애니메이션의 속도를 느리게하고 2의 눈금을 사용하면 갑자기 절반 크기로 확대되고 천천히 표준으로 확대되고 1 초 후에 갑자기 2 배 커지고 천천히 증가합니다 (다른 1 초) 원래 크기로 되돌아갑니다. –

+0

이 뷰의 슈퍼 뷰는이 뷰를 'layoutSubviews'에 놓습니다. 어떻게 든 애니메이션에 참여하고 있습니까? –