亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

利用swift實(shí)現(xiàn)卡片橫向滑動動畫效果的方法示例

2020-03-09 17:44:49
字體:
供稿:網(wǎng)友

本文主要給大家介紹了關(guān)于利用swift/205134.html">swift實(shí)現(xiàn)卡片橫向滑動動畫效果的相關(guān)資料,分享出來供大家參考學(xué)習(xí),下面來一起看看詳細(xì)的介紹吧。

根據(jù)慣例,首先上效果圖:

swift,橫向滑動卡片,橫向滾動,cell橫向滾動圖

那天去面試,面試官突然拿出手機(jī)點(diǎn)開了一個app,自個在那點(diǎn)了一會,然后問我 這個效果怎么實(shí)現(xiàn),當(dāng)時一看可以滑動,肯定用scrollView 或者 collectionView實(shí)現(xiàn),就大概的說了下。今天剛好閑下來,就敲一敲這個效果。

先來分析下這個效果:

卡片是橫向滾動,并且每個卡片的位置都是保持在屏幕中間的,而且 左右相鄰的卡片都露出來一點(diǎn)邊
collectionView 和scrollView都可以實(shí)現(xiàn),在這里,我們用collectionView實(shí)現(xiàn),但是我們平常普通用的collectionView都是正屏滑動的??!而且是平滑,所有我們只能自定義UICollectionViewFlowLayout 流式布局,才可以達(dá)到上圖效果.

廢話不多說,直接上代碼:

創(chuàng)建collectionView布局

//創(chuàng)建collectionView布局func setepUI() {//CustomLayout是自定義的UICollectionViewFlowLayout layout = CustomLayout() layout?.itemSize = CGSize(width: SCREEN_WIDTH-80, height: SCREEN_HEIGHT-64-120) let rect = CGRect(x: 0, y: 64, width:SCREEN_WIDTH , height: SCREEN_HEIGHT-64) collectionView = UICollectionView(frame: rect, collectionViewLayout: layout!) collectionView?.delegate = self collectionView?.dataSource = self view.addSubview(collectionView!) collectionView?.register(CustomViewCell.self, forCellWithReuseIdentifier: "identifier") collectionView?.backgroundColor = UIColor.red }

實(shí)現(xiàn)代理方法:

我們在extension中實(shí)現(xiàn):

// MARK: -- delegate and datasourceextension ViewController:UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{ func numberOfSections(in collectionView: UICollectionView) -> Int { return 1 } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 10 } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {//CustomViewCell是自定義的cell let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "identifier", for: indexPath) as! CustomViewCell cell.backgroundColor = UIColor.orange cell.lable?.text = "/(indexPath.row)//(10)" return cell }}

至此,我們可以得到普通的效果,左右滑動,但中間cell不會居中,兩側(cè)cell也不會縮放,如下圖:

swift,橫向滑動卡片,橫向滾動,cell橫向滾動圖

這個時候就需要在自定義的流式布局 CustomLayout里做點(diǎn)什么了:

初始化方法 prepare , 初始化一些內(nèi)容:

//重寫prepare方法 //布局之前的準(zhǔn)備工作 初始化 這個方法每次layout發(fā)生改變就調(diào)用一次override func prepare() {  scrollDirection = UICollectionViewScrollDirection.horizontal   minimumLineSpacing = 20.0  sectionInset = UIEdgeInsets(top: 0, left: 40, bottom: 0, right: 40)  super.prepare() }

(該方法默認(rèn)返回false) 返回true frame發(fā)生改變就允許重新布局 內(nèi)部會重新調(diào)用prepare 和

layoutAttributesForElementsInRect override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool {  return true }

MARK:---用來計算出rect這個范圍內(nèi)所有cell的UICollectionViewLayoutAttributes 對象,循環(huán)遍歷每個attribute對象,修改frame,再將這數(shù)組返回給系統(tǒng)

 override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {  //根據(jù)當(dāng)前滾動進(jìn)行對每個cell進(jìn)行縮放  //首先獲取 當(dāng)前rect范圍內(nèi)的 attributes對象  let array = super.layoutAttributesForElements(in: rect)  private let ScaleFactor:CGFloat = 0.001//縮放因子  //計算縮放比 首先計算出整體中心點(diǎn)的X值 和每個cell的中心點(diǎn)X的值  //用著兩個x值的差值 ,計算出絕對值  //colleciotnView中心點(diǎn)的值  let centerX = (collectionView?.contentOffset.x)! + (collectionView?.bounds.size.width)!/2  //循環(huán)遍歷每個attributes對象 對每個對象進(jìn)行縮放  for attr in array! {   //計算每個對象cell中心點(diǎn)的X值   let cell_centerX = attr.center.x   //計算兩個中心點(diǎn)的便宜(距離)   //距離越大縮放比越小,距離小 縮放比越大,縮放比最大為1,即重合   let distance = abs(cell_centerX-centerX)   let scale:CGFloat = 1/(1+distance*ScaleFactor)   attr.transform3D = CATransform3DMakeScale(1.0, scale, 1.0)  }  return array }

到目前為止,我們可以得到一個縮放的效果,但是仍然沒有達(dá)到我們要的效果,可視區(qū)域的cell并沒有居中顯示,而是滑到哪里就到哪里:

如下圖:

swift,橫向滑動卡片,橫向滾動,cell橫向滾動圖

所以我們還得重寫一個方法:

func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint

需要注意的兩個參數(shù):

  • proposedContentOffset :手指滑動視圖最終停止的便宜量,并不是手指離開時的偏移量(congtentOffset)
  • velocity:手指滑動的速率

實(shí)現(xiàn)該方法:

/// <#Description#> /// /// - Parameter proposedContentOffset: 當(dāng)手指滑動的時候 最終的停止的偏移量 /// - Returns: 返回最后停止后的點(diǎn) override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {  let visibleX = proposedContentOffset.x  let visibleY = proposedContentOffset.y  let visibleW = collectionView?.bounds.size.width  let visibleH = collectionView?.bounds.size.height  //獲取可視區(qū)域  let targetRect = CGRect(x: visibleX, y: visibleY, width: visibleW!, height: visibleH!)  //中心點(diǎn)的值  let centerX = proposedContentOffset.x + (collectionView?.bounds.size.width)!/2  //獲取可視區(qū)域內(nèi)的attributes對象  let attrArr = super.layoutAttributesForElements(in: targetRect)!  //如果第0個屬性距離最小  var min_attr = attrArr[0]  for attributes in attrArr {   if (abs(attributes.center.x-centerX) < abs(min_attr.center.x-centerX)) {    min_attr = attributes   }  }  //計算出距離中心點(diǎn) 最小的那個cell 和整體中心點(diǎn)的偏移  let ofsetX = min_attr.center.x - centerX  return CGPoint(x: proposedContentOffset.x+ofsetX, y: proposedContentOffset.y) }

至此,整個過程結(jié)束,其實(shí)很簡單,主要是對這幾個方法理解!

最后代碼下載:

github下載地址:點(diǎn)這里

 

總結(jié)

以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。

 

注:相關(guān)教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
日韩电影免费一区| 97国产suv精品一区二区62| 国产色综合一区二区三区| 国产日韩成人精品| 国产精品不卡| 在线91av| 一区二区欧美日韩| 影音先锋中文字幕一区二区| 亚洲图片小说视频| 青青久草在线| 日韩偷拍一区二区| 韩国自拍一区| 青青草免费观看免费视频在线| 日韩女优视频免费观看| 国产精品扒开腿做爽爽爽视频| 日韩免费视频网站| 视频一区在线观看| av在线免费播放| 精品久久国产一区| 中文有码在线| 后入内射无码人妻一区| 成人高清在线观看| 手机在线免费观看毛片| 国产精品一区二区黑丝| 欧美大奶子在线| 成人午夜在线播放| 日本午夜精品一区二区三区电影| 欧美电影精品一区二区| 欧美aaaaaaa| 99精产国品一二三产品香蕉| 久久亚洲国产精品日日av夜夜| 久久久久久久久久影院| 粉嫩虎白女毛片人体| 精品av一区二区| 日韩中文在线中文网在线观看| 懂色av中文在线| 宅男噜噜噜66一区二区66| 欧美极品少妇与黑人| 免费网站观看www在线观看| 无码人妻aⅴ一区二区三区| 成人国产电影网| 91国产视频在线观看| 日韩一级欧洲| 欧美日韩激情一区二区| 国产天堂亚洲国产碰碰| 国产在线播放一区二区三区| 中文字幕免费高| 一区二区精品免费| 国产不卡av在线播放| 激情久久五月| 99热这里只有精品3| 欧美高清电影在线看| 国产一区二区三区四区五区3d| 中文字幕av一区二区三区人妻少妇| 一级黄色在线观看| 欧美a一区二区| 一区二区三区精品视频| 国产麻豆精品95视频| 五月天电影免费在线观看一区| 永久免费精品视频网站| 新久草在线视频| 97色伦图片97色伦在线电影| 欧美亚洲视频一区二区| 337p亚洲精品色噜噜| 精品国产一区二区三区久久久| 欧美一级做一级爱a做片性| 亚洲一区二区三区四区| 亚洲无线视频| 亚洲精品国产无码| 秋霞影院一区二区| 久久亚洲综合| 国产精品黑丝在线播放| 国模大尺度一区二区三区| 亚洲黄色小说视频| 亲爱的老师9免费观看全集电视剧| 色资源网在线观看| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 99国产牛牛视频在线网站| 日韩av在线播放观看| 人交獸av完整版在线观看| 亚洲成人tv网| 在线视频1区| 国产成人精品一区二区无码呦| 深爱五月综合网| 青少年xxxxx性开放hg| 视频一区二区三区国产| 国产凹凸在线观看一区二区| 一级特黄性色生活片| 久久久久久久久久久免费视频| 国产九色porny| 福利在线播放| 首页亚洲欧美制服丝腿| 成人免费观看cn| 羞羞网站在线看| 精品久久久久99| 日韩理论片在线| 日本高清视频免费看| 国产永久在线观看| 亚洲人吸女人奶水| 2019亚洲男人天堂| 亚欧美中日韩视频| 懂色av一区二区三区蜜臀| 亚洲娇小xxxx欧美娇小| 国产精品日韩欧美一区二区三区| 欧美videos另类| 国内外激情在线| 黑人极品videos精品欧美裸| 国产精品美女久久久久人| 日本夜夜草视频网站| 一本色道a无线码一区v| 久久动漫网址| 国产麻豆乱码精品一区二区三区| 亚洲欧美另类久久久精品2019| 黄网免费入口| 欧美性猛交xxxxxx富婆| 范冰冰一级做a爰片久久毛片| 日韩av不卡在线播放| 国产精品激情av电影在线观看| 人人狠狠综合久久亚洲婷| 亚洲精品aaa| 6080yy精品一区二区三区| 特级丰满少妇一级aaaa爱毛片| 亚洲不卡在线视频| 成人国产精品一级毛片视频| 天天在线女人的天堂视频| 国产精品成人一区二区三区吃奶| 怕怕欧美视频免费大全| 在线码字幕一区| 亚洲视频香蕉人妖| 日日噜噜夜夜狠狠久久丁香五月| 欧美三级自拍| 久久精品一本久久99精品| 亚洲国产精品狼友在线观看| 精品日产乱码久久久久久仙踪林| 九九九九九九精品任你躁| 欧美色图色就是色| 老牛国内精品亚洲成av人片| 亚洲www啪成人一区二区麻豆| 岳张嘴把我的精子吞下去| 欧美人与动牲交xxxxbbbb| 黄色av小说在线观看| 激情小说综合网| 性生交生活影碟片| 成人亚洲综合色就1024| 国产精品999久久久| 亚洲av成人精品一区二区三区| jizz免费看| 亚洲伊人春色| 欧美精品一区二区三| 91超薄肉色丝袜交足高跟凉鞋| 五月激情丁香一区二区三区| 日韩1区在线| 免费在线日本| 久草免费资源| aa亚洲一区一区三区| 777琪琪电影午夜理伦片| 69久成人做爰电影| 草草视频在线播放| h1515四虎成人| 在线亚洲美日韩| 人与牲动交xxxxbbbb高清| 色呦呦日韩精品| 黄视频网站在线观看| 黄色av网址在线观看| 精品久久久精品| 蜜桃av噜噜一区二区三| 亚洲国产一区二区a毛片| 欧美日韩偷拍视频| 不卡的av中国片| 激情小说亚洲一区| 国产视频不卡在线| 亚洲 欧美 国产 另类| 日本道色综合久久影院| 国产在线看一区| av一区二区不卡| 1区2区3区在线观看| 丰满少妇一区| 亚洲综合精品国产一区二区三区| 欧美在线你懂得| 国产精品色婷婷久久58| 欧美色综合网| 美女被羞羞网站| 亚洲激情社区| 欧美1区2区3区| 99综合在线| 欧美一级淫片videoshd| 精品福利av导航| 新狼窝色av性久久久久久| 成人国产精品免费视频| 久久久夜色精品亚洲| 欧美xxxx在线观看| 一区二区日韩欧美| 久久久国产精品午夜一区ai换脸| 欧美性老头oldtight| 26uuuu精品一区二区| 日韩av卡一卡二| youjizz.com国产| 看电影就来5566av视频在线播放| 欧美日韩视频不卡| 成人精品视频99在线观看免费| 成人免费观看视频在线观看| 波多野结衣中文字幕一区二区三区| 亚洲不卡系列| 久久久久成人精品无码| 国产精品亚洲电影久久成人影院| 在线这里只有精品| 成人h动漫精品一区二区下载| 日韩毛片在线免费看| 五月天激情播播| 在线免费观看日本一区| 四虎成人精品一区二区免费网站| 欧美一区二区久久| 视频一区二区精品的福利| 26uuu欧美日本| 成人在线手机视频| 亚洲婷婷在线| 成人片黄网站色大片免费毛片| 俄罗斯精品一区二区三区| 国产精品自产拍在线观看中文| 久久精品人人做人人综合| 国产欧美久久一区二区三区| 91日韩视频在线观看| 中文字幕 日韩有码| 在线观看久久久久久| 美女久久精品| 欧美另类专区| 色综合久久久久久久久| 亚洲精品99久久久久中文字幕| 婷婷国产成人久久精品激情| 国精品无码人妻一区二区三区| 黄色电影免费在线看| 精品国产一区二区精华| 天天操夜夜操av| 日韩欧美精品免费| 日本全棵写真视频在线观看| 免费播放av| 日本网站在线免费观看| yellow在线观看网址| 久久综合国产精品台湾中文娱乐网| 欧美专区在线观看| 欧美日韩黄视频| 男人插女人下面视频| 日本黄色片免费观看| 水蜜桃在线免费观看| 国产97在线视频| 色婷婷综合激情| 男人插女人下面视频| 在线日本中文字幕| 久久综合九色欧美综合狠狠| 4480yy私人影院高清不卡| freexxx性亚洲精品| 久久亚洲私人国产精品va| 北岛玲精品视频在线观看| 国产三级三级三级看三级| 欧美与动交zoz0z| 久久久欧美精品sm网站| 黄网站视频在线观看| 一本一道久久久a久久久精品91| 国产美女直播视频一区| 国产精品国产三级国产传播| 一区二区精品在线观看| 成人免费va视频| 欧美性一级生活| 玩弄中年熟妇正在播放| 欧美日韩在线观看成人| www.国产精品一二区| 九七电影院97理论片久久tvb| 日韩一区二区免费在线观看| 国产精品第七影院| 久久精品中文字幕电影| 超碰在线亚洲| 国产在线拍偷自揄拍精品| 黄色片在线免费观看| 国产精品福利观看| 啦啦啦中文高清在线视频| 色综合久久天天综线观看| 一级一片免费看| 九九热这里有精品视频| 国产成人一区二区三区别| 欧美日韩卡一| 国产精品情侣呻吟对白视频| 91精品人妻一区二区三区果冻| 国产精品久久久久aaaa九色| 中文在线免费一区三区| 97在线看免费观看视频在线观看| jzzjzzjzz亚洲成熟少妇| 天堂精品一区二区三区| 久久99久久99精品免费看小说| 欧美激情一级欧美精品| 国产一区二区三区播放| 亚洲国产精品午夜在线观看| 成人羞羞视频在线看网址| 亚洲精品第一区二区三区| 午夜电影亚洲| 欧美视频在线不卡| 成人乱码手机视频| 奇米在线7777在线精品| 成人在线短视频| 亚洲欧洲色图综合| 伊大人久久香线焦宗合一75大| 99久久久久久久久久| 蜜臀在线观看| 女女同性女同一区二区三区91| 女人天堂在线| 在线视频影院| 精品999视频| 国产婷婷成人久久av免费高清| 欧美日韩激情一区二区三区| a4yy在线播放免费观看视频| ijzzijzzij亚洲大全| 99re热视频精品| 国产精品熟女一区二区不卡| 99久久精品免费看国产交换| 亚洲品质自拍| 色丁香久综合在线久综合在线观看| 中文字幕777| 欧美国产日本高清在线| 伊人伊成久久人综合网站| 国产一区二区日韩| 99热手机在线观看| 91成人噜噜噜在线播放| 五月天亚洲综合| 欧美momandson| 蜜臂av日日欢夜夜爽一区| 一色屋成人免费精品网站| 91传媒视频在线播放| 欧美精品国产精品| 欧美日韩电影免费看|