我读了很多,我知道你必须坚持约束,编辑它,并将layoutIfNeeded包装在UIVIEw动画块中.
但是当谈到这件事时,我有点迷失了.如果有人可以解释我如何完成this animation,我会很乐意.
我认为它可能使用UIPanGestureRecognizer来将前导空间的常量更改为容器约束,但它可能使用UIDynamics(在右侧的反d效果).
解决方法 那么,UIPanGestureRecognizer可以实现类似的行为[UIVIEw animateWithDuration:animations:].是的,你设置了领先的空间约束,并根据UIPanGestureRecognizer状态进行更改.记住,您只需要设置最终约束(定义滑块的最终位置).中级动画职位是为您计算的.对于滑块,我们有默认左位置和激活的中间位置.对于视图旋转,我们可以使用UIVIEw的transform属性.
IB中的自动布局约束
设置动画选项(UIVIEwAnimationoptionCurveEaSEOut动画曲线)可以产生反d效果. UIPanGestureRecognizer代码(省略实例变量声明,因为它们的名称是不言自明的):
- (IBAction)onPan:(UIPanGestureRecognizer*)sender{ switch (sender.state) { case UIGestureRecognizerStateBegan: _startOffset = self.leadingSpace.constant; _maxOffset = self.slIDer.supervIEw.frame.size.wIDth - kHorizontalpadding - self.slIDer.frame.size.wIDth; break; case UIGestureRecognizerStateChanged: { CGfloat offset = _startOffset + [sender translationInVIEw:self.slIDer.supervIEw].x; offset = MIN(offset,_maxOffset); self.leadingSpace.constant = offset; break; } case UIGestureRecognizerStateEnded: { CGfloat offset = _startOffset + [sender translationInVIEw:sender.vIEw.supervIEw].x; UIcolor *bgcolor = [UIcolor lightGraycolor]; CGfloat rotation = 0; if (offset < _maxOffset) { offset = kHorizontalpadding; } else { offset = (_maxOffset + kHorizontalpadding)/2; bgcolor = [UIcolor redcolor]; rotation = M_PI_2; } self.leadingSpace.constant = offset; [UIVIEw animateWithDuration:.5 delay:0 options:UIVIEwAnimationoptionCurveEaSEOut animations:^{ [self.slIDer layoutIfNeeded]; self.slIDer.backgroundcolor = bgcolor; self.slIDer.transform = CGAffinetransformMakeRotation(rotation); } completion:nil]; break; } default: break; }}
UIVIEwAnimationoptionCurvelinear(捕获模拟器)的动画结果:
动画结果与UIVIEwAnimationoptionCurveEaSEOut(捕获模拟器):
UIDynamics
随着UIDynamics的事情变得越来越复杂.好的起点是Ray Wenderlich UIKit Dynamics Tutorial.
对于d跳滑块,我们可以添加以下行为:
UigravityBehavior将一个滑块拉到起始位置.我们需要改变角度属性以将重力向左引导.> uicollisionbehavior定义允许动作的左边缘和右边缘.如果我们将父视图视为边界,则translateReferenceBoundsIntoBoundary属性将非常有用.另外我们还需要添加额外的边界,使用addBoundaryWithIDentifIEr:fromPoint:topoint(或bezIEr path)在中间停止滑块.> UIDynamicItemBehavior来改变d性和可能的阻力属性,分别配置反d和加速.>可能的UIPushBehavior与识别器的veLocityInVIEw结合使用:在用户释放滑块时指定滑块速度>可能的UISnapBehavior作为替代UIGravityBehavior
总结以上是内存溢出为你收集整理的ios – Autolayout,UID动力和动画全部内容,希望文章能够帮你解决ios – Autolayout,UID动力和动画所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)