2012-12-06 7 views
1

나는 밟거나 스쿼시 된 것처럼 보이게하려고합니다. 이 코드는 제가 가지고있는 코드입니다. 그러나 스쿼시 만하는 대신 아래쪽을 밀어 넣습니다 (스케일 애니메이션이기 때문에). 이미지를 단순하게 축소하지 않고 축소 할 수있는 방법이 있습니까? 아마도 내가"스쿼시"애니메이션 효과

  [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut 
          animations:^{ 
           basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 0.9);} 
          completion:^(BOOL finished){if (finished){ 

       [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut 
           animations:^{ 
            basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);} 
           completion:NULL];}}]; 
+0

스케일링을 좋아하지만 하단은 고정 된 위치에 있습니까? – Tommy

+0

그래, 정확히 :) – user1824518

답변

2

스케일링을 기준으로 발생 두 개의 이미지를? 사용할 필요가 기본적으로 레이어의 중심 뷰의 레이어의 anchorPoint.

옵션은 다음과 같습니다. - 고정 점을 변경하십시오. - 변환을 세 부분으로 구성하십시오. (1) 앵커를 맨 아래로 변환합니다. (2) 규모; (3) 앵커를 원래 위치로 되돌려 놓으십시오. - 변환을 두 부분으로 구성하십시오. (1) 눈금; (2) 바닥을 원래 있던 곳으로 번역하십시오.

그 밖의 모든 항목이 같으면 고정 점을 변경하면 번역과 동일한 효과가 나타나므로 전체 버전을 설명하는 방법에 관계없이 요약 형식으로 번역본을 추가 할 수 있습니다. 가장 쉬운 방법은 변환을 설정하는 동시에 레이어의 center을 설정하는 것입니다. 스케일링과 변환은 동시에 적용되는 선형 변환이므로 정확하게 동기화됩니다.

예. 당신은 변경 것 :

basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 0.9); 

같은 더 뭔가 : 특정 경우

CGFloat amountToScale = 0.9f; 

CGAffineTransform transform = 
      CGAffineTransformMakeTranslation(0.0f, 
         (1.0f - amountToScale)*0.5f*basketView.bounds.size.height); 

basketView.transform = CGAffineTransformScale(transform, 
            1.0f, amountToScale); 

, 원래 크기의 0.1의 총을 제거하는 것입니다 0.9로 확장. 앵커 포인트가 중앙에 있으므로 그 중 0.05는 상단에서 나오고 0.05는 하단에서옵니다. 바닥에서 벗어나려는 것을 원하지 않으므로 뷰를 아래쪽으로 이동시켜이를 상쇄합니다.

+0

위대한 정보, 도움을 많이 주셔서 감사합니다! – user1824518