2016-08-06 4 views
2

私はxamarin、コードのみ、StoryBoardを持たないiosアプリケーション、またはデザイナーを開発しています。 多くの画像を含むUiViewControllerを実装し、水平方向にスクロールする必要があります(thisのように)。xamarin.iosは画像のみのコードを持つPageControllerを実装しています

私に適したものは見つかりませんでした。 誰かに私に見せたい提案や例がありますか?

+0

そのリンクはiOSではなくtvOS向けです – Jason

答えて

5

ストーリーボードまたは.xibなしでUIPageViewControllerが必要なようです。

これを実装するには、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); 
        } 
    } 
    
  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; 
        } 
    } 
    
  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; 
        } 
    } 
    

そして最後には、あなたのAppDelegate.csFinishedLaunchingメソッドをオーバーライド:

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

が、それはあなたを助けることができると思います。

まだご質問がある場合は、そのままここにおいてください。

関連する問題