iOS Swift iPad方向改变了UIPagerViewController

时间:2016-04-26 06:15:18

标签: ios swift ipad orientation

我正在尝试解决IPAD上的以下问题!

我想要一个动态创建的PagerViewController,其中1到n个ViewController作为孩子!

这个问题我解决了:

func initialize() {
    orderedViewControllers = []

    let iCountPerPages = iCols*iRows

    var oViewController:UIPagerPage? = nil

    for oLayoutObject:LayoutObjectDto in lLayoutObject {

        if oViewController == nil || oViewController?.lLayoutObjects.count == iCountPerPages {
            if oViewController != nil {
                orderedViewControllers.append( oViewController! )
            }

            oViewController = self.storyboard?.instantiateViewControllerWithIdentifier("UIPagerPage") as? UIPagerPage
            oViewController?.iRows = self.iRows
            oViewController?.iCols = self.iCols
        }

        if oLayoutObject.isDataSource() {
            oViewController?.lLayoutObjects.append(oLayoutObject)
        }
    }

    dispatch_async(dispatch_get_main_queue(), {
        self.setViewControllers([self.orderedViewControllers.first!],
            direction: .Forward,
            animated: true,
            completion: nil)
    });

}

所以现在是第一个问题:

我希望UIPagerPage在横向上获得4 Cols ans 2 Rows和在纵向上获得2行x 2 Cols的布局。

通过大小类这个问题是不可解决的? 我通过以下方式指出行数和列数来解决这个问题:

enum ScreenTyp {
case PHONE_LANDSCAPE, PHONE_PORTRAIT, PAD_LANDSCAPE, PAD_PORTRAIT

static func getScreenTyp() -> ScreenTyp {
    if(UIDevice.currentDevice().userInterfaceIdiom == .Phone) {
        //Phone
        if UIDevice.currentDevice().orientation==UIDeviceOrientation.Portrait {
            //Portrait
            return .PHONE_PORTRAIT
        } else {
            //Landscape
            return .PHONE_LANDSCAPE
        }
    } else {
        //Pad
        if UIDevice.currentDevice().orientation==UIDeviceOrientation.Portrait {
            //Portrait
            return .PAD_PORTRAIT
        } else {
            //Landscape
            return .PAD_LANDSCAPE
        }
    }
}

static func isOrientationIsLandscape() -> Bool {
    return UIApplication.sharedApplication().statusBarOrientation.isLandscape
}

static func isOrientationIsPortrait() -> Bool {
    return UIApplication.sharedApplication().statusBarOrientation.isPortrait
}

}

从UIPagerPage动态生成布局。

所以但是在旋转时(从横向到纵向)它正在旋转,但布局仍然是4x2而不是2x2。

所以现在我试图通过以下方式重新加载旋转的所有页面:

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
    self.initialize()
}

有了这个功能,我得到一个NSExeption,我想因为动画仍在运行,这个功能效果更好:

override func didRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation) {
    self.initialize()
}

但仍会显示旋转前显示的页面!

感谢' S

0 个答案:

没有答案