좀 나약하지만 골목 iOS 앱이 처음 시작될 때 나오는 슬라이딩 장치를 만들고 싶어요

13446 단어 Swift
최근에도 iOS 개발을 시작했다.
아직 익숙하지 않기 때문에 조그마한 일로 곤두박질쳤다.
길지만 별거 아니야.

UIPageViewController는 어떻게 사용합니까?


나는 제목 같은 일을 하고 싶다.
야후에서 조사하면 UIPage View Controller를 사용한다고 들었어요.
그래서 나는 각양각색의 블로그와 무언가를 보았지만 내가 너무 멍청해서 내 머릿속에 전혀 들어오지 않았다.
그래서 절차를 지루하게 썼다.
기본적으로 엑스코드에 샘플을 준비했기 때문에 그걸 보면 거의 끝이에요.
↓ 이 페이지는 Application이죠.

우선 스토리보드에 UIPage ViewController가 있는 걸 봤어요.
아니요.
스토리보드에는 RootViewController와 DataViewController 두 개가 놓여 있다.
둘 다 일반 UIViewController입니다.
먼저, 부모님인 ViewController를 보십시오.
그 중에서 UIPage ViewController 실례를 만들었고ddChildViewController를 만들었다.
안드로이드가 말하는 Fragment의 느낌.
이 방법은 매우 유행합니까?
UIPage ViewController는 항상 여러 ViewController를 표시하는 프레임입니다.
따라서 어떤 내용의 ViewController를 보여야 하는지에 대한 판단은 다른 대상에게 의뢰된다.
Android에서 이러한 유형의 객체를 어댑터라고 합니다.iOS에서는 DataSource라고 하는 것 같습니다.
샘플에 데이터 소스 객체 ModelController가 정의되어 있습니다.
ModelController.swift
class ModelController: NSObject, UIPageViewControllerDataSource {
    // blahblah...
}
↑ 단순한 대상.
데이터 소스가 되기 위해서는 U I P a g eViewController DataSource 프로토콜이 필요합니다.
ModelControllerpageViewController(_:viewControllerBeforeViewController:) pageViewController(_:viewControllerAfterViewController:)이 두 가지를 이루고 있습니다.
이 방법에서 화면을 조회할 때 어떤 UIViewController를 보여야 하는지 판단하고 구체적인 UIViewController를 되돌려야 한다.
pageViewController
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
        var index = self.indexOfViewController(viewController as DataViewController)
        if (index == 0) || (index == NSNotFound) {
            return nil
        }

        index--
        return self.viewControllerAtIndex(index, storyboard: viewController.storyboard!)
}
viewControllerBeforeViewController,viewControllerAfterViewController이 물건은 매우 중요하다.
이view Controller가 몇 위에 표시된 정보를 변수 index에 저장하여 빼기를 하고, 빼기의 위치에 대응하는 UIView Controller를 만들고 되돌려줍니다.
  • 현재 위치를 검색하여 인덱스에 저장
  • index 더하기
  • index에 맞는 UIViewController를 가져오고 돌아오기
  • 현재 위치를 가져와 index에 저장

    indexself.indexOfViewController의 방법으로 계산한다.
    indexOfViewController
    func indexOfViewController(viewController: DataViewController) -> Int {
            // Return the index of the given data view controller.
            // For simplicity, this implementation uses a static array of model objects and the view controller stores the model object; you can therefore use the model object to identify the index.
            if let dataObject: AnyObject = viewController.dataObject {
                return self.pageData.indexOfObject(dataObject)
            } else {
                return NSNotFound
            }
    }
    
    주어진 데이터 ViewController에서 데이터 Objectvar dataOject: AnyObject?로 정의ModelController 자체 유지되는 정렬 페이지 데이터 중 몇 위에 저장합니까?이런 처리.

    색인 더하기 빼기

    index++ 또는 index--

    index에 해당하는 UIViewController를 가져와 반환

    pageViewController의 마지막 return self.viewControllerAtIndex(index, storyboard: viewController.storyboard!)에서 처리되었습니다.
    UIViewController가 생성됩니다.
    viewControllerAtIndex
    func viewControllerAtIndex(index: Int, storyboard: UIStoryboard) -> DataViewController? {
            // Return the data view controller for the given index.
            if (self.pageData.count == 0) || (index >= self.pageData.count) {
                return nil
            }
    
            // Create a new view controller and pass suitable data.
            let dataViewController = storyboard.instantiateViewControllerWithIdentifier("DataViewController") as DataViewController
            dataViewController.dataObject = self.pageData[index]
            return dataViewController
    }
    
    첫마디는 발리식이다.
    페이지 데이터가 없으면 ViewController를 돌려주지 않기 때문에 nil을 돌려줍니다.index가 페이지 데이터의 사이즈보다 큰 경우도 마찬가지다.
    다음 글은 주어진 스토리보드에서viewController(DataviewController)를 생성하고 데이터 Object를 설정하여 되돌려줍니다.
    샘플pageData에서 init()로 정의했다.
    나는 이것pageData이 API를 찍어서 얻은 상황에서 어떻게 하면 좋을까 생각한다.RootViewController와 같은 방법으로 API를 두드린 후 델리 등에서 결과를 받은 후 DataSource의 페이지 데이터에 깊이 들어가다.잠시 상관하지 않다.
    그나저나 pageData는 달의 배열이다.

    UIPageViewController의 사용 방법은 대체로 명확하다.프로그램이 처음 시작되면 나오는 슬라이드를 만들고 싶어요.


    먼저 ModelController에서 미리 응용 프로그램에서 준비한 이미지를 표시하는 경우 이미지의 경로를 정렬하여 유지합니다.
    그러면 샘플에서 말한 DataViewController에 그림을 그리면 됩니다.

    Amage.xcassets를 사용한 슬라이드 쇼 이미지 준비


    아무래도 그림이야.
    적당한 그림을 넣으면 해상도에 따라 그림을 구분할 수 있다.
    이번에 hoge,huga,piyo라는 자산을 제작했습니다.

    DataViewController에서 UIImageView 구성


    스토리보드에서 설정하세요.
    원래 있던 UIlabel이 삭제되었습니다.

    ModelController의 페이지 데이터를 자산의 배열로 바꾸기


    ModelController.swift
    var imageData = NSArray()
    
    override init() {
        super.init()
        // Create the data model.
        imageData = ["hoge","huga","piyo"]
    }
    
    위에서 말한 바와 같이 원래var pageDataimageData로 바꾸고 그 안의 물건을 자산명칭이 있는 배열로 배열했다.
    나머지 코드도 이미지 데이터를 적절하게 고칠 것입니다.

    DataViewController를 사용하여 이미지 표시


    다음과 같이 덮어씁니다.
    DataViewController.swift
    import UIKit
    
    class DataViewController: UIViewController {
    
        @IBOutlet weak var dataImage: UIImageView!
        var imagePath: String?
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
            dataImage.contentMode = .ScaleAspectFit
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        override func viewWillAppear(animated: Bool) {
            super.viewWillAppear(animated)
    
            if let path: String = imagePath {
                self.dataImage.image = UIImage(named: path)
            } else {
                self.dataImage.image = UIImage(named: "hoge")
            }
        }
    
    
    }
    
    별일 없이 데이터 Object의 내용을 UIlabel로 표시하는 본래의 처리가 이미지 Path로 지정한 이미지로 바뀌었다.
    이렇게 하면⌘+r이렇게 될 것 같아서요.

    배웠으니 나눠 주세요.

    좋은 웹페이지 즐겨찾기