可可 – NSLayoutConstraint.constant忽略动画

可可 – NSLayoutConstraint.constant忽略动画,第1张

概述我正在为我的一个应用程序创建一个autolayout友好的分割视图类.它的各种功能是它可以折叠窗格,并可以动画化它们的崩溃,就像您可能已经看到NSSplitView所做的那样. 由于我使用约束,我通过在窗格上放置一个必需的width =(current width)约束来实现,然后以约束的常量将动画的常量设置为0: - (NSLayoutConstraint*)newHiddenConstrain 我正在为我的一个应用程序创建一个autolayout友好的分割视图类.它的各种功能是它可以折叠窗格,并可以动画化它们的崩溃,就像您可能已经看到NssplitVIEw所做的那样. @H_403_7@

@H_403_7@由于我使用约束,我通过在窗格上放置一个必需的wIDth =(current wIDth)约束来实现,然后以约束的常量将动画的常量设置为0:

@H_403_7@

- (NSLayoutConstraint*)newHIDdenConstraintAnimated:(BOol)animated {    NSLayoutConstraint * constraint = [NSLayoutConstraint constraintWithItem:self.vIEw attribute:NSLayoutAttributeWIDth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplIEr:1 constant:NSWIDth(self.vIEw.frame)];    constraint.priority = NSLayoutPriorityrequired;    CABasicAnimation * anim = [CABasicAnimation animation];    anim.timingFunction = [camediatimingFunction functionWithname:kcamediatimingFunctionEaSEOut];    anim.duration = 0.2;    constraint.animations = [NSDictionary dictionaryWithObject:anim forKey:@"constant"];    [self.vIEw addConstraint:constraint];    [(animated ? constraint.animator : constraint) setConstant:0.0];    return constraint;}
@H_403_7@这样做很美.不幸的是,稍后扩展窗格不太好.

@H_403_7@

- (voID)removeHIDdenConstraintAnimated:(BOol)animated {    if(!animated) {        [self.vIEw removeConstraint:self.hIDdenConstraint];    }    else {        NSLayoutConstraint * constraint = self.hIDdenConstraint;        NSVIEw * theVIEw = self.vIEw;        [NSAnimationContext beginGrouPing];        [constraint.animator setConstant:self.wIDth];        [NSAnimationContext currentContext].completionHandler = ^{            [theVIEw removeConstraint:constraint];        };        [NSAnimationContext endGrouPing];    }    self.hIDdenConstraint = nil;}
@H_403_7@如果我插入一些时间码,我可以看到完成处理程序几乎立即触发,在有时间动画之前删除约束.在NSAnimationContext上设置持续时间没有任何影响.

@H_403_7@任何想法,我可以在这里做错什么?

解决方法 您必须首先设置完成处理程序,然后才将消息发送到动画师代理.否则,似乎在动画开始之后设置完成处理程序立即触发它,并且在动画有时间完成之前,常量被删除.
我刚刚检查了一个简单的代码: @H_403_7@

@H_403_7@

[NSAnimationContext beginGrouPing];    NSAnimationContext.currentContext.duration = animagionDuration;    NSAnimationContext.currentContext.completionHandler = ^{[self removeConstraint:collapseConstraint];};    [collapseConstraint.animator setConstant:expandedHeight];    [NSAnimationContext endGrouPing];
@H_403_7@这样做完美,但如果在-setConstant之后设置完成处理程序,则动画无法运行.

总结

以上是内存溢出为你收集整理的可可 – NSLayoutConstraint.constant忽略动画全部内容,希望文章能够帮你解决可可 – NSLayoutConstraint.constant忽略动画所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1027870.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存