Действительно ли UIAttachmentBehavior и UISnapBehavior являются взаимоисключающими, когда длина вложения равна 0? - PullRequest
0 голосов
/ 15 марта 2020

Я пытался сделать хорошую анимацию пружины / поселения с помощью UIDynamics, поэтому я подумал: «О, мне нужна привязка, чтобы получить ее в нужном положении, и приложение для пружинистого / поселения, когда оно приходит в покой». Нечто подобное можно увидеть в видео WWD C 2015 года:

WWD C 2015

Что нового в UIKit Dynamics и Визуальные эффекты (21:40)

https://developer.apple.com/videos/play/wwdc2015/229

Докладчик ссылается на привязку и составное поведение с 4 насадками, настроенными как пружины. Я совершенно не понимаю, почему вам понадобится 4 упругих насадки для выполнения sh этого.

Однако в моих экспериментах, когда я комбинирую и UISnapBehavior, и UIAttachmentBehavior, это выглядит как UIAttachmentBehavior игнорируется (частота и демпфирование) и только UISnapBehavior влияет на вещи.

Я могу полностью удалить UISnapBehavior и получить эффект пружины / стабилизации только с UIAttachmentBehavior с длиной от 0 до anchorPoint . Что заставляет меня думать, что UISnapBehavior может быть просто оболочкой более высокого уровня вокруг UIAttachmentBehavior с длиной 0?

Примерно так:

attachmentBehavior = UIAttachmentBehavior(item: item, attachedToAnchor: CGPoint.zero)
attachmentBehavior.frequency = 3.0
attachmentBehavior.damping = 0.3
attachmentBehavior.length = 0

itemBehavior = UIDynamicItemBehavior(items: [item])
itemBehavior.density = 0.01
itemBehavior.resistance = 10
itemBehavior.friction = 0.0
itemBehavior.allowsRotation = false

...

func snap(to position: CGPoint){
    attachmentBehavior.anchorPoint = CGPoint(x: position.x, y: position.y)
}
...