Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.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 约束的变更';在使用UIPangestureRecognitor时,s常量是滞后的_Ios_Swift - Fatal编程技术网

Ios 约束的变更';在使用UIPangestureRecognitor时,s常量是滞后的

Ios 约束的变更';在使用UIPangestureRecognitor时,s常量是滞后的,ios,swift,Ios,Swift,代码如下: @objc func handleSwipe(_ sender: UIPanGestureRecognizer) { let translation = sender.translation(in: self.view) if sender.state == .began || sender.state == .changed { let c = self.cardView.frontCardConstraint.constant - translat

代码如下:

@objc func handleSwipe(_ sender: UIPanGestureRecognizer) {
    let translation = sender.translation(in: self.view)
    if sender.state == .began || sender.state == .changed {
        let c = self.cardView.frontCardConstraint.constant - translation.y
        if c < 35 && c >= 11 {
            self.cardView.frontCardConstraint.constant = c
            self.cardView.layoutIfNeeded()
        } else {
            //
        }
    } else if sender.state == .ended {
        //
    }
    sender.setTranslation(.zero, in: self.view)
}
@objc func handlesweep(uuu发送方:UIPangestureRecognitizer){
让translation=sender.translation(在:self.view中)
如果sender.state==.start | | sender.state==.changed{
设c=self.cardView.frontCardConstraint.constant-translation.y
如果c<35&&c>=11{
self.cardView.frontCardConstraint.constant=c
self.cardwiew.layoutifneed()文件
}否则{
//
}
}如果sender.state==.end,则为else{
//
}
sender.setTranslation(.0,在:self.view中)
}

它可以做我想做的,但当快速拖动时,它看起来相当滞后。有什么我可以更改或应该切换到自定义手势识别器吗?

尝试使用
transform
属性,而不是更改约束(我想布局计算可能效率低下)

只需要对代码进行一些小的更改。首先使用以下公式计算
c

let c = self.cardView.transform.ty - translation.y
然后通过更换以下部件移动
卡视图

self.cardView.frontCardConstraint.constant = c
self.cardView.layoutIfNeeded()
为此:

self.cardView.transform = CGAffineTransform.identity.translatedBy(x: c, y: 0)

完成平移后,只需设置
self.cardwiew.transform=CGAffineTransform.identity
将其重置。

尝试使用
transform
属性而不是更改约束(我猜布局计算可能效率低下)

只需要对代码进行一些小的更改。首先使用以下公式计算
c

let c = self.cardView.transform.ty - translation.y
然后通过更换以下部件移动
卡视图

self.cardView.frontCardConstraint.constant = c
self.cardView.layoutIfNeeded()
为此:

self.cardView.transform = CGAffineTransform.identity.translatedBy(x: c, y: 0)


完成平移后,只需设置
self.cardwiew.transform=CGAffineTransform.identity
将其重置。

什么是
frontCardConstraint
?你想用这张卡做什么?对不起,忘了加。所以我有两张牌,一张在另一张后面<代码>前卡约束是前卡的底部约束。我想让它使用手势识别器垂直移动,当它被拖动到足够大(常数大于35)时,我想让卡切换顺序(else语句中的剪切代码)。你说的滞后是什么意思??快速抖动??我的意思是,当卡片快速拖动时,“动画”会有点结巴。两个考虑因素:1。卡片的绘制是否复杂(例如,为固定卡片视图而缩小的高分辨率图像;在
draw(:)
中动态绘制任何内容;使用阴影或透明胶片等)。2.您可能希望使用触摸事件而不是手势识别器,这样您就可以使用预测性触摸来减少感知的滞后。什么是
frontCardConstraint
?你想用这张卡做什么?对不起,忘了加。所以我有两张牌,一张在另一张后面<代码>前卡约束是前卡的底部约束。我想让它使用手势识别器垂直移动,当它被拖动到足够大(常数大于35)时,我想让卡切换顺序(else语句中的剪切代码)。你说的滞后是什么意思??快速抖动??我的意思是,当卡片快速拖动时,“动画”会有点结巴。两个考虑因素:1。卡片的绘制是否复杂(例如,为固定卡片视图而缩小的高分辨率图像;在
draw(:)
中动态绘制任何内容;使用阴影或透明胶片等)。2.您可能希望使用触摸事件而不是手势识别器,这样您就可以使用预测性触摸来减少感知的滞后。谢谢您的回答!不幸的是,现在情况更糟了:(@Dimitrie TomaFurdui,我没想到会发生这样的事情..你能分享一个我们可以自己尝试的工作示例吗?你是说,这个项目吗?@Dimitrie TomaFurdui,如果你能分享整个项目(以防不保密的话),这也是一个选项..或者是一个我们可以复制您的问题的最小示例(因此只是项目基础的相关部分)…但是一个工作示例,我们可以作为项目打开,或者复制粘贴到PlayGround如果我共享XIB的屏幕截图会有所帮助吗?谢谢您的回答!不幸的是,现在它更落后了:(@Dimitrie-TomaFurdui我没想到会这样..你能分享一个我们可以自己尝试的工作示例吗?你是说,这个项目吗?@Dimitrie-TomaFurdui如果你可以分享整个项目(以防不保密),这也是一个选择..或者是一个我们可以复制你的问题的最小示例(所以只是项目库的相关部分)…但是一个工作示例,我们可以作为项目打开,或者复制粘贴到PlayGround如果我共享XIB的屏幕截图,它会有帮助吗?