C# reactiveX 多点触控拖动清除 OnPointerUp 事件上的缓冲区



我正在尝试在unirx中实现多点触控拖动以实现统一。我使用Buffer(count, skip)重载来获取每个手指的最后一个事件并计算距离。

我现在希望在抬起手指时清除缓冲区,否则仍在缓冲区中的旧值将创建一个大的增量。

private IObservable<TwoFingerDragEventData> CalculateDelta(IObservable<PointerEventData> dragEvent, int pointerId) {
return dragEvent
.Where(data => data.pointerId == pointerId)
.Select(data => data.position)
.Buffer(2, 1)
.Select((IList<Vector2> list) => new TwoFingerDragEventData(
Vector2.Distance(list[0], list[1]),
list[1] - list[0]
))
;
}

我现在通过将整个事情包装到另一个可观察对象中来解决它。

我使用了一个设置为在拖动开始事件时true并在拖动停止事件时设置为falseBehaviourSubject<bool> isDragActiveSource

isDragActiveSource
.AsObservable()
.Where(isActive => isActive == true)
.SelectMany((bool _) => {
IObservable<TwoFingerDragEventData> firstTouch = CalculateDelta(onDrag, 0);
IObservable<TwoFingerDragEventData> secondTouch = CalculateDelta(onDrag, 1);
return firstTouch.Zip(
secondTouch,
(TwoFingerDragEventData left, TwoFingerDragEventData right) => TwoFingerDragEventData.Avg(left, right
).TakeUntil(isDragActive.Where(isActive => isActive == false));
})

当行为主体发出falsefirstTouch并且secondTouch观察量完成(takeUntil(时,当它再次变得true时,它们被重新创建。

相关内容

  • 没有找到相关文章

最新更新