UIAttachmentBehavior 中的长度是如何确定的?
Posted
技术标签:
【中文标题】UIAttachmentBehavior 中的长度是如何确定的?【英文标题】:How is length in UIAttachmentBehavior determined? 【发布时间】:2014-05-10 18:22:23 【问题描述】:UIAttachmentView中length属性的documentation如下:
如果您愿意,可以在创建附件后使用此属性调整附件长度。系统会根据您初始化附件的方式自动设置初始长度。
我的问题是关于最后一句话:初始长度是如何计算的?
【问题讨论】:
【参考方案1】:初始长度由您首次创建附件行为时选择的锚点决定。比如调用initWithItem:offsetFromCenter:attachedToAnchor:
时offsetFromCenter
到attachedToAnchor
的距离。
例如,考虑这样的手势识别器:
- (void)handlePan:(UIPanGestureRecognizer *)gesture
static UIAttachmentBehavior *attachment;
CGPoint location = [gesture locationInView:self.animator.referenceView];
if (gesture.state == UIGestureRecognizerStateBegan)
attachment = [[UIAttachmentBehavior alloc] initWithItem:self.viewToAnimate attachedToAnchor:location];
NSLog(@"before adding behavior to animator: length = %.0f", attachment.length); // this says zero, even though it's not really
[self.animator addBehavior:attachment];
NSLog(@"after adding behavior to animator: length = %.0f", attachment.length); // this correctly reflects the length
else if (gesture.state == UIGestureRecognizerStateChanged)
attachment.anchorPoint = location;
NSLog(@"during gesture: length = %.0f", attachment.length); // this correctly reflects the length
else if (gesture.state == UIGestureRecognizerStateEnded || gesture.state == UIGestureRecognizerStateCancelled)
[self.animator removeBehavior:attachment];
attachment = nil;
此报告:
2014-05-10 14:50:03.590 MyApp [16937:60b] 在向动画师添加行为之前:长度 = 0 2014-05-10 14:50:03.594 MyApp [16937:60b] 向动画师添加行为后:长度 = 43 2014-05-10 14:50:03.606 MyApp [16937:60b] 在手势期间:长度 = 43 2014-05-10 14:50:03.607 MyApp [16937:60b] 在手势期间:长度 = 43如果您在实例化UIAttachmentBehavior
之后(但在将行为添加到动画师之前)立即查看length
,则length
似乎为零。但是,一旦您将行为添加到动画师,length
就会正确更新。
【讨论】:
我在initWithItem:offsetFromCenter:attachedToAnchor:
之后记录了一个 UIAttachmentBehavior 实例的长度,该值结果为 0,而实际行为表明并非如此。
@DanielDuan 将行为添加到动画师后,length
就会正确更新。查看代码示例和日志输出。以上是关于UIAttachmentBehavior 中的长度是如何确定的?的主要内容,如果未能解决你的问题,请参考以下文章
将 CGAffineTransformScale 与 UIAttachmentBehavior (UIDynamicAnimator) 一起使用
结合 UIAttachmentBehavior 和 UICollisionBehavior
使用 UIAttachmentBehavior 和自动布局约束拖动 UIView