슬라이딩으로 간단하게 페이지 전환 [Swift]

10476 단어 XcodeSwiftiOS

입문


강좌에서 흔히 볼 수 있는 전환 페이지에 관하여.
원래 페이지를 나누기 위해 페이지뷰 컨트롤러를 준비했지만, 사용하려면 매우 번거로운 코드를 많이 써야 한다.(메인 코드 매몰)
이 글은 주요 코드를 간소화하는 데 도움이 된다.
실제 설치에는 마법 같은 부분이 많지만 주요 코드는 상당히 간결할 수 있다!

환경


iOS
Swift2.0(Swift1.2 코드만 Xcode7.0에서 실행할 수 있도록 변경)
Xcode 7.0

견본


샘플(라이브러리 포함)은 Gitub에서 제공
ha1fha1f/PagingViewController
git에 익숙한 사람들이 좋아하는 곳에서 clone.
익숙하지 않은 사람은 터미널을 시작하여 다음 명령을 실행하십시오.바탕 화면에 PagingViewController 폴더가 있을 수 있는지 알고 싶습니다.
git
cd ~/Desktop
git clone https://github.com/ha1fha1f/PagingViewController.git
이렇게 샘플 프로젝트가 돼서 실행할 수 있어요.

PagingSample에서는 샘플이고 PagingLib은 라이브러리가 아닙니다.
이 견본에는 교과서처럼 다섯 장의 사진이 나왔고 마지막 페이지에만 시작 버튼이 있었다.그걸로 시작하면 화면이 View Controller로 이동합니다.

최소한의 이용 방법


예는 거의 최소 구성입니다.

  • PagingViewController/PagingViewControllerLib 중 3개입니다.프로젝트에 소프트웨어 파일 추가
  • PagingViewController.swift
  • PagingDataController.swift
  • PagingCellViewController.swift

  • PagingCellViewController를 상속하는 클래스 만들기
    이것이 바로 매 페이지다.
    최소 한도
    override func setDataObject(dataObject: AnyObject?) {}
    
    받은 dataObject를 필드로 적절히 변환하여 저장하십시오.
    다른 것은 모두 평상시와 같아서 특수 처리를 쓸 필요가 없다.
    샘플은 아래와 같다.
    class ImagePageCellViewController: PagingCellViewController{
        var imagePath: String!
        override func setDataObject(dataObject: AnyObject?){
            if let tmpDataObject = dataObject {
                self.imagePath = tmpDataObject as! String
            }else{
                self.imagePath = "default.jpg"
            }
        }
    }
    

  • PagingDataController를 상속하는 클래스 만들기
    모든 페이지를 관리하는 클래스를 지원합니다.
    최소 한도
    override func instanciateViewControllerAtIndex(index: Int) -> PagingCellViewController? {}
    
    문서 레지스트리에 항목을 추가합니다.
    index는 페이지 수를 나타냅니다(0-)
    예는 다음과 같다.
    class TutorialPageDataController: PagingDataController {
        override func instanciateViewControllerAtIndex(index: Int) -> PagingCellViewController? {
            let dataViewController: PagingCellViewController
    
            // 最後のページだけ変えるサンプル
            if index == (self.pageData.count-1) {
                dataViewController = ImagePageCellLastViewController()
            }else{
                dataViewController = ImagePageCellViewController()
            }
    
            return dataViewController
        }
    }
    

  • PagingViewController를 상속하는 클래스 만들기
    이것은 모든 페이지를 subView로 사용하는 ViewController 클래스입니다.다음은 부모 컨트롤러라고 합니다.그것도 UIVIew Controller를 계승했다.
    최소한, PagingDataController를 계승하는 클래스의 실례를 만들고 setupWithDataController를 실행해야 합니다.
    예는 다음과 같다.
    class TutorialViewController: PagingViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let data = ["pic1.jpg", "pic2.jpg", "pic3.jpg", "pic4.jpg", "pic5.jpg"] 
            self.setupWithDataController(TutorialPageDataController(data: data) 
        }
    }
    
  • 이렇게 하면 최소한의 페이지 나누기 처리를 실현할 수 있다
  • 세부 정보


    계승류

    self.sendMessageToRoot("test")
    
    관리되는ViewController에 메시지를 보낼 수 있습니다. (정확히 말하면 부모 Controller 클래스를 호출하는 receive Message () 방법입니다.)
    self.delegate에 부모 컨트롤러를 넣었기 때문에 이것도 사용할 수 있습니다
    self.만약 네가 index를 본다면, 너는 자신이 몇 페이지인지 얻을 수 있다
    PagingDataController에서 index에 따라 다른 클래스를 만들 수 있기 때문에 몇 가지 계승된 클래스는 문제없습니다.

    계승류


    이것은 부모 컨트롤러이기 때문에 이 배경은 페이지가 미끄러질 때의 배경이다.반대로, 모든 페이지를 표시할 때, 페이지 컨트롤과 같은 움직이지 않는 것을 표시할 수 있다.
    페이지 설정 항목
    // ページの切り替わりのアニメーション
    self.trasitionStyle = UIPageViewControllerTransitionStyle.Scroll
    
    // ページ切り替わりの方向(縦横)
    self.navigationOrientation = UIPageViewControllerNavigationOrientation.Horizontal
    
    // PageControl(点が動く奴)が不要なときは
    self.pageControl.removeFromSuperview()
    
    self.페이지 컨트롤의 위치와 사이즈는 보통 만지작거려요.
    사용 가능한 방법은 다음과 같습니다.
    // 特定のページヘジャンプする
    moveTargetPage(index: Int)
    
    // 今何ページ目を見ているか
    getCurrentPageIndex() -> Int!
    
    // 今見ているViewControllerのインスタンスを取得
    getCurrentViewController() -> PagingCellViewController
    
    덮어쓸 수 있는 방법으로
    // 管理下のpageCellからのメッセージを受け取る
    override func receiveMessage(message: String) {}
    
    // ページ遷移後に呼ばれる。fromとtoはindexが渡される
    override func afterPaging(from: Int, to: Int) {}
    
    // ページ遷移前に呼ばれる。fromとtoはindexが渡される
    override func beforePaging(from: Int, to: Int) {}
    
    하계.
    ※ 현재 PageControl은 after Paging을 사용하기 때문에 after Paging만 슈퍼입니다.afterPaging(from, to:to)을 호출하십시오.

    끝내다


    PageControl을 라이브러리에 넣을 필요가 없을 수도 있어요, 웃음.
    Cocoapods로 설치할 수 있습니까?

    좋은 웹페이지 즐겨찾기