UIscrollView&UIpageControlを使用してページをめくる最適な方法

2677 ワード

現在、多くの場合、Appは広告の起動や説明ページの更新などのニーズを実現しなければならない.この文章は簡単で迅速で、安価で美しい解決策を説明している.(iPhoneデスクトップページめくり効果と一致)
筆者はN種のUIScrollViewのdelegate方法を試みた後、効果はすべてよくないことを発見した.スライド速度(velocity)がおかしいか、contentOffSetの値が予想外であるかのいずれかである.人を狂わせるUIScrollViewにこのような属性があることを発見するまで:isPagingEnabled.ハハ問題はすぐに解決して話をします~
ここに記載されていて、必要な友达を助けたいと思っています.

くだらないことを言わないで、コードをつけなさい。


import UIKit

// global constants
let screenW = UIScreen.main.bounds.width
let screenH = UIScreen.main.bounds.height
let screenS = CGSize(width: screenW, height: screenH)

class AdvertisePageViewController: UIViewController, UIScrollViewDelegate {

  var pageCtrl: UIPageControl!
 
  override func viewDidLoad() {
    super.viewDidLoad()
   
    let scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: screenW, height: screenH))
    scrollView.contentSize = CGSize(width: screenW * 3, height: screenH)
    scrollView.bounces = false
    scrollView.showsHorizontalScrollIndicator = false
    scrollView.delegate = self
   
    //The key move!
    // .  scrollView , 
    // frame scrollView frame.
    // true , UIKit .
    scrollView.isPagingEnabled = true

    self.view.addSubview(scrollView)

    let image1 = UIImageView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: screenS))
    let image2 = UIImageView(frame: CGRect(origin: CGPoint(x: screenW, y: 0), size: screenS))
    let image3 = UIImageView(frame: CGRect(origin: CGPoint(x: screenW * 2, y: 0), size: screenS))
    image1.image = UIImage(named: "ad_01")
    image2.image = UIImage(named: "ad_02")
    image3.image = UIImage(named: "ad_03")
    scrollView.addSubview(image1)
    scrollView.addSubview(image2)
    scrollView.addSubview(image3)
   
    // 
    pageCtrl = UIPageControl(frame: CGRect(x: 0, y: screenH-30, width: screenW, height: 30))
    pageCtrl.numberOfPages = 3
    pageCtrl.currentPageIndicatorTintColor = UIColor.orange
    pageCtrl.pageIndicatorTintColor = UIColor.lightGray
    pageCtrl.currentPage = 0
    self.view.addSubview(pageCtrl)
    self.view.bringSubview(toFront: pageCtrl)
  }

以下は代理方法であり、小赤点の変化を実現する問題である.実際にiOSデスクトップのスライド効果はスライド停止時に変化する.次のようになります.
  func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    let xOffset = scrollView.contentOffset.x
    if xOffset < 0.5 * screenW {
      pageCtrl.currentPage = 0
    } else if xOffset > 0.5 * screenW && xOffset < 1.5 * screenW {
      pageCtrl.currentPage = 1
    } else {
      pageCtrl.currentPage = 2
    }
  }

このDemoは私のGitHubに置いて、みんなもダウンロードして効果を見ることができます~
大成功!みんなの役に立つことを望みます~