Странное поведение свойства offsetFromCenter объекта UIAttachmentBehavior
Я изучал книгу Мэтта Нойбурга ios 13 "Погрузитесь в подробности" и наткнулся на пример "dragByAttachment". Вот:
@IBAction func dragging(_ p: UIPanGestureRecognizer) {
switch p.state {
case .began:
self.anim = UIDynamicAnimator(referenceView:self.view)
self.anim.perform(Selector(("setDebugEnabled:")), with:true)
self.anim.delegate = self
let loc = p.location(ofTouch:0, in:p.view)
let cen = p.view!.bounds.center
let anchor = p.location(ofTouch:0, in:self.view)
let att = UIAttachmentBehavior(item:p.view!,
offsetFromCenter:UIOffset(horizontal: loc.x - cen.x , vertical:loc.y - cen.y), attachedToAnchor:anchor)
self.anim.addBehavior(att)
let b = UIFieldBehavior.linearGravityField(direction:CGVector(0,1))
b.addItem(p.view!)
b.strength = 0.4
b.direction = CGVector(dx: 0, dy: 1)
self.anim.addBehavior(b)
self.att = att
case .changed:
// print()
self.att.anchorPoint = p.location(ofTouch:0, in: self.view)
default:
print("done")
self.anim = nil
}
}
Эта строчка меня сильно смутила:
let att = UIAttachmentBehavior(item:p.view!,
offsetFromCenter:UIOffset(horizontal: loc.x - cen.x , vertical:loc.y - cen.y))
потому что только в случае offsetFromCenter было равно UIOffset(horizontal: loc.x - cen.x, vertical:loc.y - cen.y), это свойство (offsetFromCenter) не выполняло то, что Apple doc говорил нам о задании offsetFromCenter. Вот результат gif, который я прикрепил:
Нет смещения от центральной точки видов (черный ящик). И неважно, с какой точки мы будем проводить эксперимент.
но если мы изменим свойство offsetFromCenter с предыдущего UIOffset (по горизонтали: loc.x - cen.x, vertical: loc.y - cen.y) на новое UIOffset (по горизонтали: loc.x - cen.x - 20, по вертикали:loc.y - cen.y - 20) это измененное свойство вносит коррективы в UIAttachmentBehavior в соответствии с документацией Apple, как и должно. я прикрепил гифку
Почему в первом примере это так странно?