Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 奇怪的抖动-斯威夫特_Ios_Swift_Animation_Uikit Dynamics_Uidynamicbehavior - Fatal编程技术网

Ios 奇怪的抖动-斯威夫特

Ios 奇怪的抖动-斯威夫特,ios,swift,animation,uikit-dynamics,uidynamicbehavior,Ios,Swift,Animation,Uikit Dynamics,Uidynamicbehavior,我正在尝试使用UISnapBehavior创建tweening back动画 我试着让一个正方形可以拖动,然后当正方形被释放时,它会回到原来的位置。每次它返回时,它似乎有一个奇怪的轨迹,在到达目的地之前,它似乎不是以正确的角度返回,而是以一种奇怪的半圆返回 先谢谢你 我的代码如下: var animator:UIDynamicAnimator? = nil; var ball : Ball!; var ball2 : Ball!; var snap: UISnapBehavior! var gr

我正在尝试使用
UISnapBehavior
创建
tweening back
动画

我试着让一个正方形可以拖动,然后当正方形被释放时,它会回到原来的位置。每次它返回时,它似乎有一个奇怪的轨迹,在到达目的地之前,它似乎不是以正确的角度返回,而是以一种奇怪的半圆返回

先谢谢你

我的代码如下:

var animator:UIDynamicAnimator? = nil;
var ball : Ball!;
var ball2 : Ball!;
var snap: UISnapBehavior!
var gravity : UIGravityBehavior!;

var speed : Double! = 0;
var lastTouchPoint :  CGPoint!;
var attach : UIAttachmentBehavior! = nil;
var itemBehavior : UIDynamicItemBehavior!;
var snapping : UISnapBehavior! = nil;
var currentBall : Ball! = nil;


override init(frame: CGRect) {
    super.init(frame: frame);
    println( "-- initiated view --" );

    self.backgroundColor = UIColor.orangeColor();

    ball = Ball( frame: CGRect(x: 200, y: 200, width: 50, height: 50 ) );
    self.addSubview(ball);

    ball2 = Ball( frame: CGRect(x: 100, y: 100, width: 50, height: 50 ) );
    self.addSubview(ball2);

    setup()

    self.addGestureRecognizer( UIPanGestureRecognizer(target: self, action: "panHandler:") );

    self.attach = UIAttachmentBehavior(item: self, attachedToAnchor: CGPoint(x: 0, y: 0) );

}

func setup() {
    animator = UIDynamicAnimator(referenceView:self);

    var collision: UICollisionBehavior!
    collision = UICollisionBehavior(items: [ball, ball2])
    collision.translatesReferenceBoundsIntoBoundary = false;
    collision.collisionDelegate = self;
    animator?.addBehavior(collision)

    var dynamicItem : UIDynamicItemBehavior = UIDynamicItemBehavior(items: [ball, ball2] );
    dynamicItem.allowsRotation = false;
    self.animator!.addBehavior(dynamicItem);
}

func panHandler( recognizr : UIPanGestureRecognizer ) {
    switch( recognizr.state ) {
        case  UIGestureRecognizerState.Began:

            let location = recognizr.locationInView(self);
            let view : AnyObject? =  self.hitTest(location, withEvent: nil);

            if( view is Ball ) {

                currentBall = view as! Ball;

                if(  self.attach != nil ){ self.animator!.removeBehavior(attach); self.attach = nil; }


                self.attach = UIAttachmentBehavior(item: currentBall, attachedToAnchor: location );
                self.animator!.addBehavior(self.attach);
                self.attach.damping = 1;
                self.attach.length = 1;

                let dynamicItem : UIDynamicItemBehavior = UIDynamicItemBehavior(items: [currentBall] );
                dynamicItem.allowsRotation = false;

                self.animator!.addBehavior(dynamicItem);
            }
            break;

        case  UIGestureRecognizerState.Changed :

            if( currentBall != nil ) {
                let location = recognizr.locationInView(self);
                self.attach.anchorPoint = location;
            }

            break;

        default :
            println("--- snap ---");

            if( self.currentBall == nil ) {return;}

            self.animator!.removeBehavior(attach);
            self.attach = nil;

            var snap : UISnapBehavior = UISnapBehavior(item: self.currentBall, snapToPoint: self.currentBall.startingPoint );
            snap.damping = 1;

            self.animator!.addBehavior(snap);

            break;
    }
}

现在是2018年,我看到了几乎相同的运动。我认为这是苹果实施中的一个缺陷,你和我都应该提交一份缺陷报告,因为这是唯一可以修复的方法

根据我的经验,当
阻尼
高于1.0时,向末端移动的半圆中的这种抖动更为明显

在下面的示例中,我的手势识别器严格固定x轴值,因此理论上不应该有任何水平移动

allowsRotation
设置为
false