Выровняйте изображение по горизонтали и вертикали быстро
Я хочу выровнять изображение по другому (по горизонтали и вертикали), чтобы создать анимацию. Анимация проста: сердце будет "вибрировать" внутри логотипа Angry Bedou, но он должен быть "центрирован" на этом изображении.
Я пытался следующее:
func animate() {
heartImg.frame = CGRectMake(angryBedousImg.frame.size.width / 2, angryBedousImg.frame.size.height / 2, heartImg.frame.size.width, heartImg.frame.size.height)
let heartAnimation = CABasicAnimation(keyPath: "position")
heartAnimation.duration = 0.09
heartAnimation.repeatCount = .infinity
heartAnimation.autoreverses = true
heartAnimation.fromValue = NSValue(CGPoint: CGPointMake(heartImg.center.x - 1, heartImg.center.y))
heartAnimation.toValue = NSValue(CGPoint: CGPointMake(heartImg.center.x + 1, heartImg.center.y))
heartImg.layer.addAnimation(heartAnimation, forKey: "position")
}
Но он не будет централизован, когда я создаю приложение. Анимация работает, но не выравнивание. Я хочу, чтобы выравнивание работало на каждом устройстве в портретном режиме.
Я смотрю на раскадровку, и изображения в порядке. Что я делаю не так?
2 ответа
Попробуй это:
Это сделает ваше сердце в центре фонового изображения.
let yourImage = UIImage(named: "YourImageName")
let heartImg = UIImageView()
heartImg.image = yourImage
heartImg.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(heartImg)
self.view.addConstraint(NSLayoutConstraint(item: heartImg, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: self.yourLogoImage, attribute: NSLayoutAttribute.centerX, multiplier: 1.0, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: heartImg, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: self.yourLogoImage, attribute: NSLayoutAttribute.centerY, multiplier: 1.0, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: heartImg, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1.0, constant: 40))
self.view.addConstraint(NSLayoutConstraint(item: heartImg, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1.0, constant: 40))
Вы должны использовать свойства экрана midX и midY и вычесть половинную ширину и половинную высоту изображения:
if let imageURL = NSURL(string:"https://stackru.com/images/ef9dfaef8c3bec7e67a69584eb37fe5a3e115132.jpg"), data = NSData(contentsOfURL: imageURL), image = UIImage(data: data), image2URL = NSURL(string:"https://graph.facebook.com/10203430834250391/picture?type=large"), data2 = NSData(contentsOfURL: image2URL), image2 = UIImage(data: data2) {
let imageView = UIImageView(frame: UIScreen.mainScreen().bounds)
imageView.image = image
imageView.contentMode = UIViewContentMode.ScaleAspectFit
let image2View = UIImageView(frame: CGRect(x: UIScreen.mainScreen().bounds.midX-100, y: UIScreen.mainScreen().bounds.midY-100, width: 200, height: 200))
image2View.image = image2
image2View.contentMode = UIViewContentMode.Center
imageView.addSubview(image2View)
imageView
}
Если ваше изображение отличается от размера экрана вашего устройства, вы должны использовать большую рамку изображения midX минус меньшую рамку изображения midX и сделать то же самое для высоты:
heartImg.frame = CGRectMake(angryBedousImg.frame.size.width / 2, angryBedousImg.frame.size.height / 2, heartImg.frame.size.width, heartImg.frame.size.height)
к
heartImg.frame = CGRectMake(angryBedousImg.frame.midX - heartImg.frame.midX, angryBedousImg.frame.midY - heartImg.frame.midY, heartImg.frame.size.width, heartImg.frame.size.height)