推广

iOS 轮播图(Banner)滑动时根据图片大小而改变自身高度

iseeyu2年前 (2024-02-22)推广143

AutoBanner

iOS 轮播图(Banner)滑动时根据图片大小而改变自身高度

正文

核心细想就是,检测Banner滑动,实时计算高度。
用的UIScrollView的代理方法有:

  • - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
    核心代码:
//记录当前位置
_currentOffSet = scrollView.contentOffset.x;
//改变contentSize,一定要改变height,因为有高度变化,如果一直为0或不变的话会闪
scrollView.contentSize = CGSizeMake(SCREEN_WIDTH * self.imageUrlArr.count, self.itemSize.height);
  • - (void)scrollViewDidScroll:(UIScrollView *)scrollView;
    核心代码:
CGFloat offset = scrollView.contentOffset.x;
if (offset == _currentOffSet) {
    return;
}
//偏移差,用来判断是左滑还是右滑
CGFloat offsetValue = offset - _currentOffSet;
//上一个图片的高度
NSDictionary *lastSizeDic = self.sizeArr[_lastIndex];
CGFloat lastHeight = [self getImageHWithImgW:lastSizeDic[@"width"] imgH:lastSizeDic[@"height"]];
//将要滑动到的图片的高度
NSInteger nextIndex = (offsetValue > 0) ? MIN(_lastIndex + 1, self.imageUrlArr.count - 1) : MAX(_lastIndex - 1, 0);
NSDictionary *nextSizeDic = self.sizeArr[nextIndex];
CGFloat nextHeight = [self getImageHWithImgW:nextSizeDic[@"width"] imgH:nextSizeDic[@"height"]];
//偏移量:偏移差取绝对值,用来计算实时高度
CGFloat offsetX = fabs(offsetValue);
//2图片的高度差
CGFloat value = lastHeight - nextHeight;
//单位位移下的缩放的距离
CGFloat scale = value / SCREEN_WIDTH;
self.itemSize = CGSizeMake(SCREEN_WIDTH, lastHeight - scale * offsetX);
NSLog(@">>>height %lf offsetValue:%lf", self.itemSize.height, offsetValue);
//改变contentSize,一定要改变height,因为有高度变化,如果一直为0或不变的话会闪
scrollView.contentSize = CGSizeMake(SCREEN_WIDTH * self.imageUrlArr.count, self.itemSize.height);
//可能丝滑了一点点
[UIView animateWithDuration:0 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
    self.headerView.frame = CGRectMake(0, 0, SCREEN_WIDTH, self.itemSize.height);
    self.tableView.tableHeaderView = self.headerView;
} completion:nil];
  • - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;
    核心代码:
NSLog(@">>>index:%zd", index);
_lastIndex = index;
_currentOffSet = self.imageScrollView.contentOffset.x;

Demo地址

总结

其实没有什么复杂的点,就是一些简单的计算。

后记

总想写点什么,却又无从写起。

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/56578.html

相关文章

电子商务网站SEO优化新知:导览列内频道规划对於SEO的重要性

电子商务网站SEO优化新知:导览列内频道规划对於SEO的重要性

网站导航栏(Navigation Bar),就像网站的一个导览地图,帮助网站访客导向他想去的目标页面,同时也会告诉访客透过点击导航栏上的各个项目将会前往哪个网页。 ▲ ebay.com 而频道(Menu)是导航栏下更详细的分类主题,访客可以籍由导航栏下的各种不同频道了解整个网站的分类组...

华为人才规划管理

华为人才规划管理

本文作者 | 经韬纬略智库全文17533字※ 以下摘自 《华为人才管理全景图》企业人才战略的落地,最终要依靠人才管理的各项活动来实现。人才规划是人才管理活动的起点,企业通过分析人才的供需差距,制订能够满足业务发展需要的人力供应计划,为后续的人才管理活动指明方向。基于业务战略...

湖北又一地将发放消费券

湖北又一地将发放消费券

好消息!襄阳、荆门、十堰相继加入“湖北发券大家庭”后宜昌的新春消费券也来了!总价值2000万元!关于这波宜昌消费券你想知道的都在这实施时间1月24日至3月4日投放金额宜昌消费券分为四类:商场消费券1000万元、超市消费券400万元、住宿消费券200万元,餐饮消费券400万元...

小红书广告投放效果评估!

小红书广告投放效果评估!

小红书投放能否带来效果,怎么看? 如图,以上我拉取了cemoy的面霜和水乳这俩个品类在小红书上的内容数及在淘宝中的搜索词的数据。 水乳从19年5月份开始在小红书上大量投放,当月搜索量即可达到62842。而随着内容量的上升,达到目标搜索量后,就开始减少投放,每月内容按...

淘宝关键词排名是怎么做的(淘宝关键词排名怎么查询)

淘宝关键词排名是怎么做的(淘宝关键词排名怎么查询)

1、首先登陆淘宝卖家账号,进入到卖家中心页面。2、然后可以选择卖家中心的上方点击进入“服务中心”,之后在服务中心找到“标题优化”,之后用标题优化服务对商品进行选词。...

怎么写好一份数据分析报告(数据分析报表怎么做)

怎么写好一份数据分析报告(数据分析报表怎么做)

#1 我认为一个好的分析报告应该要的结构 #2所有的分析报告都有一个大前提 --- 了解报告的受众 知道他们是谁,喜欢什么样的风格,怎样的叙事过程,才好判断报告的载体和形态。 是用excel,还是用word,或者PPT和key note ? 是喜欢鲜艳的对比色,...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片