xamarin.ios使用仅图像代码实现PageController

pas*_*669 2 c# xamarin.ios ios

我正在开发一个带有xamarin的ios应用程序,只有代码,没有StoryBoard或任何设计师.我需要实现一个包含许多图像的UiViewController,并且水平滚动,就像这样.

我找不到适合我的东西.所以有人有一些建议或一些例子给我看?

Ala*_*Liu 5

好像你需要一个UIPageViewController没有故事板或.xib.

您需要3个自定义类来实现它.

  1. MyPageViewController - 一个习俗 UIPageViewController

    public class MyPageViewController : UIPageViewController
    {
        private List<ContentViewController> pages = new List<ContentViewController>();
    
        public MyPageViewController() : base(UIPageViewControllerTransitionStyle.Scroll, UIPageViewControllerNavigationOrientation.Horizontal)
        {
            View.Frame = UIScreen.MainScreen.Bounds;
    
            pages.Add(new ContentViewController(0,UIColor.Red));
            pages.Add(new ContentViewController(1,UIColor.Green));
            pages.Add(new ContentViewController(2,UIColor.Blue));
    
            DataSource = new PageDataSource(pages);
    
            SetViewControllers(new UIViewController[] { pages [0] as UIViewController }, UIPageViewControllerNavigationDirection.Forward, false, null);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. PageDataSource:

    public class PageDataSource : UIPageViewControllerDataSource
    {
        List<ContentViewController> pages; 
    
        public PageDataSource(List<ContentViewController> pages)
        {
            this.pages = pages;
        }
    
        override public UIViewController GetPreviousViewController(UIPageViewController pageViewController, UIViewController referenceViewController)
        {
            ContentViewController currentPage = referenceViewController as ContentViewController;
            ContentViewController pageToReturn = null;
    
            if (currentPage.Index == 0)
            {
                pageToReturn = pages[pages.Count - 1];
            }
            else
            {
                pageToReturn = pages[currentPage.Index - 1];
            }
    
            // NOTE: If the same view controller is returned, UIPageViewController will break and show black screen
            return pageToReturn != currentPage ? pageToReturn : null; 
        }
    
        override public UIViewController GetNextViewController(UIPageViewController pageViewController, UIViewController referenceViewController)
        {
            ContentViewController currentPage = referenceViewController as ContentViewController;
            ContentViewController pageToReturn = pages[(currentPage.Index + 1) % pages.Count];
    
            return pageToReturn != currentPage ? pageToReturn : null;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. ContentViewController- 自定义UIViewController,只需要添加属性Index

    public class ContentViewController : UIViewController
    {
        private int index = -1;
        public int Index
        {
            get
            { 
                return index;
            }
        }
    
        public ContentViewController(int _index, UIColor backColor)
        {
            this.index = _index;
            this.View.Frame = UIScreen.MainScreen.Bounds;
            this.View.BackgroundColor = backColor;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

最后,覆盖FinishedLaunching你的方法AppDelegate.cs:

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
    this.Window = new UIWindow(UIScreen.MainScreen.Bounds);
    this.Window.RootViewController = new MyPageViewController();
    this.Window.MakeKeyAndVisible();

    return true;
}
Run Code Online (Sandbox Code Playgroud)

希望它可以帮到你.

如果您还有一些问题,请将其保留在此处.