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

Posted

技术标签:

【中文标题】iOS:将屏幕坐标中的 CGPoint 转换为 iCarousel 中的 CATransform3D?【英文标题】:iOS: convert CGPoint in screen coordinates to CATransform3D in iCarousel? 【发布时间】:2015-05-20 09:44:05 【问题描述】:

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

据我了解,最好暂时隐藏/删除可拖动元素并在轮播项数组之外创建其代理,该数组代表真实元素的位置和变换属性。

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

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

【问题讨论】:

【参考方案1】:

我找到了解决方案,但在我的特殊情况下,它看起来很糟糕。我只需要在每个拖动位置更改事件上沿 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];

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

【讨论】:

以上是关于iOS:将屏幕坐标中的 CGPoint 转换为 iCarousel 中的 CATransform3D?的主要内容,如果未能解决你的问题,请参考以下文章

iOS坐标转换

IOS-- UIView中的坐标转换

iOS UIView中的坐标转换

iOS UIView中的坐标转换

iOS开发笔记--UIView中的坐标转换

UIView中的坐标转换