2014-12-22 2 views
1

У меня есть 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

Вы пробовали настройку преобразования на изображении. Увеличьте его до (1, 0), по вертикали нуль. – Sandeep

+0

Вот что я делаю, проблема заключается в том, что он не масштабируется с середины – Aggressor

+0

Где вы масштабируете, вы устанавливаете кадр изображенияView, как вы показали в приведенном выше коде. – Sandeep

ответ

2

Вы можете использовать масштабирование с использованием преобразования свойства UIView в. Кажется, что масштабирование не позволяет вам сделать значение 0, и оно переходит к окончательному значению без анимации. Таким образом, вы можете в основном сделать масштабирование y значение пренебрежимо малым, как 0,001.

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