iOS: 将屏幕坐标中的CGPoint 转换为iCarousel 中的CATransform3D?

iOS: convert CGPoint in screen coordinates to CATransform3D in iCarousel?

我想添加在 carousel 中拖动元素的可能性,但我在定位和转换可拖动元素时遇到了一些麻烦。

据我所知,最好暂时 hide/delete 可拖动元素并在代表真实元素的位置和转换属性的轮播项目数组之外创建其代理。

问题是如何根据其位置设置此类代理项的正确转换。 items 数组中的一个视图有自己的索引和旋转木马滚动偏移量(这对所有项目都是通用的)。但是分离的视图只有一个位置(更好的情况是它存储原始旋转木马项目的变换,我可以找到最近的view/views)。

那么如何将给定的屏幕点转换为iCarousel坐标系中的偏移量呢?变换矩阵足够复杂:旋转、透视和平移。

我找到了解决方案,但在我的特定情况下它看起来很糟糕。我只需要沿着 y 移动,所以在每个拖动位置更改事件时:

CGFloat newY = currentTouchPosition.y - positionOnTouchStartDragging.y + (draggedPageIndex - carousel.scrollOffset) * spacing * carousel.bounds.size.height;
CGFloat delta = self.bounds.size.height * spacing;
CATransform3D result = [carousel transformForItemViewWithOffset:newY / deltaY];

其中间距是轮播中或通过其委托给定的变量。