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

Posted

技术标签:

【中文标题】xamarin.ios 使用仅图像代码实现 PageController【英文标题】:xamarin.ios implement PageController with images only code 【发布时间】:2016-08-06 15:01:26 【问题描述】:

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

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

【问题讨论】:

该链接适用于 tvOS,而不是 iOS 【参考方案1】:

您似乎需要一个没有情节提要或 .xib 的 UIPageViewController

你需要 3 个自定义类来实现它。

    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);
        
    
    

    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;
        
    
    

    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;
        
    
    

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

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;

希望对你有帮助。

如果您还有问题,请在此处留下。

【讨论】:

以上是关于xamarin.ios 使用仅图像代码实现 PageController的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xamarin ios 中使用轮播视图

在 iphone 7 xamarin ios 中缩小图像?

xamarin.iOS 垂直滚动图像

Xamarin.IOS(使用 Rider):每次加载 XCode 或运行模拟器时,创建的图像集都会消失

Xamarin iOS构建错误-本地链接失败(仅链接框架SDK)

根据设备方向转动相机图片 (Xamarin.iOS)