2014-12-22 5 views
1

나는 센터 (상단 및 하단 가장자리가 정확한)쪽으로 그 outter 가장자리를 축척하려는 UIImageView가 있습니다. 지금까지 내가 얻을 수있는 최선은 단지 한쪽 가장자리가 다른쪽으로 붕괴되는 것입니다 (움직이지 않습니다). 나는 양쪽 모서리가 중간을 향해 붕괴되기를 바란다.축소 A 중심점에서 UIImageView

나는 앵커 포인트를 0.5,0.5로 설정하려고 시도했지만 아무런 변경 사항이없는 문제를 해결합니다.

ImageView를 중앙으로 안쪽으로 확장하여 가장자리가 중앙쪽으로 붕괴되도록 설정할 수 있습니까?

override public func viewWillAppear(animated: Bool) 
    { 
     super.viewWillAppear(animated) 
     var uimg = UIImage(named: "img.PNG")! 
     var img:UIImageView = UIImageView(image: uimg) 
     img.layer.anchorPoint = CGPointMake(0.5, 0.5) 
     view.addSubview(img) 
     UIView.animateWithDuration(5, animations: 
      {() -> Void in 
       img.frame = CGRectMake(img.frame.origin.x,img.frame.origin.y,img.frame.width, 0) 
      }) 
      { (finished) -> Void in 
       // 
     } 

    } 
+0

imageView에서 변환 설정을 시도해 보셨습니까? 수직 (1, 0)으로 스케일합니다. – Sandeep

+0

그게 내가하고있는 문제는 중간에서 스케일링하지 않는 것입니다. – Aggressor

+0

위의 코드에서 보았 듯이 어디에서 스케일링하고, imageView의 프레임을 설정하고 있습니까? – Sandeep

답변

2

UIView의 변형 속성을 사용하여 비율 조정을 사용할 수 있습니다. 스케일링에서 값 0을 만들 수 없으며 애니메이션없이 최종 값으로 이동하는 것처럼 보입니다. 그래서, 기본적으로 0.001과 같이 무시할 수있는 스케일링 y 값을 만들 수 있습니다.

imageView.transform = CGAffineTransformMakeScale(1, 0.001) 

또한 CABasicAnimation을 사용하여, 규모 코어 애니메이션을 사용할 수 있습니다,이

let animation = CABasicAnimation(keyPath: "transform.scale.y") 
    animation.toValue = 0 
    animation.duration = 2.0 
    animation.fillMode = kCAFillModeForwards 
    animation.removedOnCompletion = false 
    imageView.layer.addAnimation(animation, forKey: "anim") 

,이 같은 더 간단 할 것이다 또는 당신은 단순히 프레임을 설정, 사용 된 방법을 사용할 수 있습니다 ,

var finalFrame = imageView.frame 
    finalFrame.size.height = 0 

    finalFrame.origin.y = imageView.frame.origin.y + (imageView.frame.size.height/2) 

    UIView.animateWithDuration(2.0, animations: {() -> Void in 
     self.imageView.frame = finalFrame 
    }) 
+0

왜 중간에서 스케일링이 발생하는지 궁금합니다! – Aggressor

+1

스케일링은 레이어의 위치 속성을 재배치하지 않고 단순히 레이어의 크기를 설정하기 때문에 동일한 위치에 있지만 뷰를 늘리거나 압축합니다. – Sandeep

1

새 프레임이 같은 장소에서 기원을 가지고 여기에

최선 시도였다. 높이를 줄이는 것과 동시에 원점을 이동해야합니다.

img.frame = CGRectMake(img.frame.origin.x, img.frame.origin.y + (img.frame.size.height/2), img.frame.size.width, 0); 
+0

예 순수한 실험에 의해 이것을 발견했으나 그것이 다음과 같이 행동하는 이유를 이해하지 못합니다./이론적으로 바닥에서 맨 아래로 스케일링하면서 움직이지 않아야합니까? 카운터는 직관적입니다! – Aggressor