Ios UIScrollViewDelegate scrollViewDidScroll方法跟不上高速滚动(flick)?
我有一个Ios UIScrollViewDelegate scrollViewDidScroll方法跟不上高速滚动(flick)?,ios,uiscrollview,uiscrollviewdelegate,Ios,Uiscrollview,Uiscrollviewdelegate,我有一个uicrollview,带有一个UIView标题,它粘在滚动视图的顶部,随着用户向下滚动,它从全尺寸缩小到小尺寸。当然,这些都是通过滚动视图代理实现的: // scroll view delegate extension SomeViewController { // scroll view did scroll public func scrollViewDidScroll(_ scrollView: UIScrollView) { let cont
uicrollview
,带有一个UIView
标题,它粘在滚动视图的顶部,随着用户向下滚动,它从全尺寸缩小到小尺寸。当然,这些都是通过滚动视图代理实现的:
// scroll view delegate
extension SomeViewController {
// scroll view did scroll
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
let contentOffsetY = scrollView.contentOffset.y
// make banner sticky
banner.frame.origin.y = max(0, contentOffsetY)
// shrink banner
if contentOffsetY > 0 && contentOffsetY <= bannerHeight! - 64 {
banner.frame.size.height = bannerHeight! - contentOffsetY
bannerGraphic.frame = banner.bounds
}
}
}
//滚动视图委托
扩展视图控制器{
//滚动视图没有滚动
公共函数scrollViewDidScroll(scrollView:UIScrollView){
让contentOffsetY=scrollView.contentOffset.y
//使横幅粘
banner.frame.origin.y=max(0,contentOffsetY)
//收缩横幅
如果contentOffsetY>0&&contentOffsetY则ScrollView委托不会收到视图滚动的每个点的通知。您真的不希望这样做……这将是太多不必要的处理
因此,当快速滚动时,完全有可能出现较大的间隙。事实上,在一次快速测试中,我刚刚做了。contentOffsetY
值从0跳到75跳到300
您的代码已关闭。您要做的是在超过最大值时处理该条件
尝试一下(我想它只会出现并取代您的功能):
扩展TestViewController:UIScrollViewDelegate{
//滚动视图没有滚动
公共函数scrollViewDidScroll(scrollView:UIScrollView){
让contentOffsetY=scrollView.contentOffset.y
//使横幅粘
banner.frame.origin.y=max(0,contentOffsetY)
//如果scrollView内容一直位于顶部
//(或向下拉,等待“反弹”)
如果contentOffsetYScrollView委托没有收到视图滚动的每一个点的通知。而且您真的不希望这样做……这将是太多不必要的处理
因此,当快速滚动时,完全有可能出现较大的间隙。事实上,在一次快速测试中,我刚刚做了。contentOffsetY
值从0跳到75跳到300
您的代码已关闭。您要做的是在超过最大值时处理该条件
尝试一下(我想它只会出现并取代您的功能):
扩展TestViewController:UIScrollViewDelegate{
//滚动视图没有滚动
公共函数scrollViewDidScroll(scrollView:UIScrollView){
让contentOffsetY=scrollView.contentOffset.y
//使横幅粘
banner.frame.origin.y=max(0,contentOffsetY)
//如果scrollView内容一直位于顶部
//(或向下拉,等待“反弹”)
如果contentOffsetY您希望banner.frame.size.height
至少为64?还是应该缩小到零?至少为64(状态栏+导航栏)好-并且…如果您在scrollview内容一直位于顶部时向下拉,那么.contentOffset.y<0
,横幅应该从顶部向下移动?还是保持“固定”到顶部,并保持其原始大小?向下拉动时,横幅不应保持固定状态确定-请参阅我的答案。您希望横幅.框架.大小.高度
至少为64?还是应该缩小到零?至少为64(状态栏+导航栏)好的-而且…如果您在scrollview内容一直位于顶部时向下拉,那么.contentOffset.y<0
,横幅是从顶部向下移动?还是保持“固定”到顶部,并保持其原始大小?向下拉时横幅不应保持固定确定-请参阅我的答案。乐于帮助:)乐于帮助:)
extension TestViewController: UIScrollViewDelegate {
// scroll view did scroll
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
let contentOffsetY = scrollView.contentOffset.y
// make banner sticky
banner.frame.origin.y = max(0, contentOffsetY)
// if scrollView content is all the way at the top
// (or pulled down, waiting to "bounce back up")
if contentOffsetY <= 0 {
// set banner to original height
banner.frame.size.height = bannerHeight
bannerGraphic.frame = banner.bounds
} else {
// view has scrolled (user has dragged *up*)
// set banner height to originalHeight - y offset,
// but keep it a minimum of 64
banner.frame.size.height = max(bannerHeight! - contentOffsetY, 64)
bannerGraphic.frame = banner.bounds
}
}
}