Как заставить Spring Animations с ограничениями вести себя правильно?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как заставить Spring Animations с ограничениями вести себя правильно?

Сообщение Anonymous »

Пытаемся заставить анимацию весны работать правильно. Я сделал репозиторий git. По сути, красный вид ограничивается следующим образом:

Код: Выделить всё

let ac = brokenView.widthAnchor.constraint(equalTo: brokenView.heightAnchor, multiplier: 9/16)
let xc = brokenView.centerXAnchor.constraint(equalTo: animView.centerXAnchor)
let yc = brokenView.centerYAnchor.constraint(equalTo: animView.centerYAnchor)
let widthC = brokenView.widthAnchor.constraint(equalTo: animView.widthAnchor)
widthC.priority = .defaultLow
let gewc = brokenView.widthAnchor.constraint(greaterThanOrEqualTo: animView.widthAnchor)
let geHC = brokenView.heightAnchor.constraint(greaterThanOrEqualTo: animView.heightAnchor)
geHC.priority = .required
Синий вид начинается с соотношения сторон != 9/16 -> анимируется до 9/16. Я хотел бы видеть, что когда синий вид становится слишком высоким, красный начинает толстеть. Вместо этого он просто придерживается привязки ширины с более низким приоритетом. Любые советы приветствуются.
Репо здесь
Код, который не так полезен, как мог бы быть без файла раскадровки:

Код: Выделить всё

import UIKit

class MyViewController: UIViewController {

@IBOutlet weak var animView: UIView!
@IBOutlet weak var brokenView: UIView!

var isBig = false

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
brokenView.border(3, color: .red)
animView.border(3, color: .blue)

animView.frame = CGRect(x: view.frame.midX - 120, y: view.frame.midY - 180, width: 240, height: 360)

brokenView.translatesAutoresizingMaskIntoConstraints = false

let ac = brokenView.widthAnchor.constraint(equalTo: brokenView.heightAnchor, multiplier: 9/16)
let xc = brokenView.centerXAnchor.constraint(equalTo: animView.centerXAnchor)
let yc = brokenView.centerYAnchor.constraint(equalTo: animView.centerYAnchor)
let widthC = brokenView.widthAnchor.constraint(equalTo: animView.widthAnchor)
widthC.priority = .defaultLow
let gewc = brokenView.widthAnchor.constraint(greaterThanOrEqualTo: animView.widthAnchor)
let geHC = brokenView.heightAnchor.constraint(greaterThanOrEqualTo: animView.heightAnchor)
geHC.priority = .required

NSLayoutConstraint.activate([
ac,
xc,
yc,
widthC,
gewc,
geHC
])

let gr = UITapGestureRecognizer(target: self, action: #selector(MyViewController.handleTap(_:)))
view.addGestureRecognizer(gr)
}

@objc func handleTap(_ gr: UITapGestureRecognizer) {
let newFrame: CGRect
if isBig {
newFrame = CGRect(x: view.frame.midX - 120, y: view.frame.midY - 180, width: 240, height: 360)
} else {
newFrame = CGRect(x: view.frame.midX - (270/2), y: view.frame.midY - (480/2), width: 270, height: 480)
}
let timing = UISpringTimingParameters.init(dampingRatio: 0.01, frequencyResponse: 10)
let anim = UIViewPropertyAnimator(duration: 10, timingParameters: timing)
anim.addAnimations {
self.animView.frame = newFrame
}
anim.addCompletion { _ in
self.isBig = !self.isBig
}
anim.startAnimation()
}

}

extension UIView {

func border(_ width: Float, color: UIColor) {
layer.borderColor = color.cgColor
layer.borderWidth = CGFloat(width)
}
}

extension UISpringTimingParameters {
public convenience init(dampingRatio: CGFloat, frequencyResponse: CGFloat) {

let mass = 1 as CGFloat
let stiffness = pow(2 * .pi / frequencyResponse, 2) * mass
let damping = 4 * .pi * dampingRatio * mass / frequencyResponse

self.init(mass: mass, stiffness: stiffness, damping: damping, initialVelocity: .zero)
}
}
Изображение



Подробнее здесь: https://stackoverflow.com/questions/786 ... e-properly
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как заставить Spring Animations с ограничениями вести себя правильно?
    Anonymous » » в форуме IOS
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Заставить пользовательский тип вести себя как std::string
    Гость » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Гость
  • Как заставить разные части моего изображения вести себя как кнопки? [закрыто]
    Anonymous » » в форуме CSS
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Как заставить мяч вести себя как подпрыгивающий и упругий мяч?
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как заставить list_blobs вести себя как gsutil
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»