- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如何用 Swift 编写此代码?
更新:发布了我试图转换的方法,最初发布了一个不同的方法,这不是我试图隐藏的方法
这适用于 Objective C,但不适用于 Swift。当我尝试将 ceilf
和 floorf
与 CGFloat
一起使用时出现转换错误。
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
float pageWidth = 200 + 30; // width + space
float currentOffset = scrollView.contentOffset.x;
float targetOffset = targetContentOffset->x;
float newTargetOffset = 0;
if (targetOffset > currentOffset)
newTargetOffset = ceilf(currentOffset / pageWidth) * pageWidth;
else
newTargetOffset = floorf(currentOffset / pageWidth) * pageWidth;
if (newTargetOffset < 0)
newTargetOffset = 0;
else if (newTargetOffset > scrollView.contentSize.width)
newTargetOffset = scrollView.contentSize.width;
targetContentOffset->x = currentOffset;
[scrollView setContentOffset:CGPointMake(newTargetOffset, 0) animated:YES];
}
最佳答案
也许晚些时候参加派对,但是如果处理 iOS11 + Swift4,恕我直言,所提出的解决方案都不是可行的解决方案。
下面有一个更适合该问题的答案,完全适用于 Swift 4.1:
override func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
let pageWidht:CGFloat = 200.0 + 30.0
let currentOffset = scrollView.contentOffset.x
let targetOffset = CGFloat(targetContentOffset.pointee.x)
var newTargetOffset:CGFloat = 0.0
if targetOffset > currentOffset {
newTargetOffset = CGFloat(ceilf(Float((currentOffset / pageWidht) * pageWidht)))
}
else {
newTargetOffset = CGFloat(floorf(Float((currentOffset / pageWidht) * pageWidht)))
}
if newTargetOffset < 0.0 {
newTargetOffset = 0.0
}
else if newTargetOffset > scrollView.contentSize.width {
newTargetOffset = scrollView.contentSize.width
}
targetContentOffset.pointee = CGPoint(x: newTargetOffset, y: 0.0)
}
关于objective-c - 在 Swift 中,您将如何编写 scrollViewWillEndDragging withVelocity targetContentOffset 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28556317/
我在 TabelViewCell 中有 CollectionView,我正在尝试为 CollectionView 的单元格进行分页和居中。但是当我使用方法时 func scrollViewWillEn
我有一个 View 覆盖在 UITableView 的顶部。但是当用户在顶部 View 上拖动时,我需要触发 UITableView 事件的滚动事件。 我在 View 上添加了 UIPanGestur
我找遍了所有地方,但找不到答案。所以,开始吧。我创建了一个长 ScrollView ,里面有 568 像素(全屏) View 。当用户向下滚动时,我希望 ScrollView 捕捉到特定位置。这是我的
我正在为我的 UICollectionView 创建自定义分页。我希望底部的一些单元格卡在屏幕边缘,但是,通过常规分页,滚动到下一页意味着如果页面底部的一半单元格显示,它只会显示另一半在下一页。我想让
documentation声明它是 points(每秒,我假设)?但是,我得到的值在 (.5, 3.5) 范围内。然后 ScrollView 在停止之前移动了数百个点。实际初速度应该相差几个数量级。
这是我的覆盖代码 - 它只是计算捕捉到的位置: - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(C
我正在为 targetContentOffset 设置一个新值在 scrollViewWillEndDragging(_:withVelocity:targetContentOffset:)在 UIT
我希望我的 UIScrollView 以特定的增量值自然地滑动到结尾,对应于水平滚动 UIScrollView 的每 50 个宽度点。为此,我定制的 scrollViewWillEndDragging
我正在尝试在 iOS 5 中使用新的 scrollViewWillEndDragging:withVelocity:targetContentOffset: UIScrollView 委托(deleg
我在一个 View Controller 上有两个 UITableViews( View Controller 是他们的代表)。其中之一将取决于 scrollViewWillEndDragging:w
我在同一个 View Controller 上使用 UITableView 和 UICollectionView。 我想改变 UICollectionView 的滚动方式,所以我在扩展中添加了一个 s
我正在尝试使用 scrollViewWillEndDragging: 方法来滚动我自己的分页 UICollectionView,在两侧都有预览,类似于 App Store 应用程序。但是,如果我停止无
我正在尝试实现一个自定义标签栏,它是可滚动的并且在每个标签栏项目上都有分页。为此,我正在使用代理 scrollViewWillEndDragging:withVelocity:targetConten
如何用 Swift 编写此代码? 更新:发布了我试图转换的方法,最初发布了一个不同的方法,这不是我试图隐藏的方法 这适用于 Objective C,但不适用于 Swift。当我尝试将 ceilf 和
我希望我的垂直 UIScrollView 仅在用户向上滚动时停在最大内容偏移处,或者在用户向下滚动时停在最小内容偏移处。 我正在使用以下两个函数 func targetContentOffset(fo
我是一名优秀的程序员,十分优秀!