切换到另一个视图,但保留在导航控制器中

时间:2012-12-03 10:22:34

标签: uiviewcontroller uinavigationcontroller xamarin.ios

我有一个导航控制器,其中包含有关特定产品的详细信息,其中一个细节是产品的小图片。现在我想添加一个按钮,该按钮必须带有放大图像的视图控制器。

如何使放大的图像与细节屏幕位于同一导航控制器上,并转换为屏幕翻转,但标题和标签栏不会翻转。

在导航控制器上添加了两个视图的概述图像。

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

    UIView.Transition(this.NavigationController.View, 1f, 
UIViewAnimationOptions.CurveEaseInOut | UIViewAnimationOptions.TransitionFlipFromRight, 
delegate { this.NavigationController.PushViewController(this.ImageViewController, false); });

在按下导航控制器时,将图像视图翻转,而不是默认转换。 ImageViewController的title属性应与您的详细信息中的title属性相同。

UINavigationController的想法是处理多个控制器,所以你不应该通过覆盖视图来对付它。

答案 1 :(得分:1)

向控制器添加两个视图,并为其框架属性设置动画以获得所需的效果 请参阅下面的示例。

using System;
using System.Collections.Generic;
using System.Linq;

using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Drawing;

namespace delete20121203
{
    // The UIApplicationDelegate for the application. This class is responsible for launching the 
    // User Interface of the application, as well as listening (and optionally responding) to 
    // application events from iOS.
    [Register ("AppDelegate")]
    public partial class AppDelegate : UIApplicationDelegate
    {
        // class-level declarations
        UIWindow window;

        //
        // This method is invoked when the application has loaded and is ready to run. In this 
        // method you should instantiate the window, load the UI into it and then make the window
        // visible.
        //
        // You have 17 seconds to return from this method, or iOS will terminate your application.
        //
        public override bool FinishedLaunching (UIApplication app, NSDictionary options)
        {
            // create a new window instance based on the screen size
            window = new UIWindow (UIScreen.MainScreen.Bounds);

            var ctrl = new MyViewController ();
            var nav = new UINavigationController (ctrl);

            window.RootViewController = nav;


            // make the window visible
            window.MakeKeyAndVisible ();

            return true;
        }
    }

    public class MyViewController : UIViewController
    {
        UIButton _button1;
        UIButton _button2;
        UIView _view1;
        UIView _view2;

        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();
            Title = "Test";

            _view1 = new UIView (View.Bounds);
            _view1.AutoresizingMask = UIViewAutoresizing.All;
            _view1.BackgroundColor = UIColor.White;

            _button1 = UIButton.FromType (UIButtonType.RoundedRect);
            _button1.Frame = new System.Drawing.RectangleF (10, 10, 150, 44);
            _button1.SetTitle ("Click", UIControlState.Normal);
            _button1.TouchUpInside += Button1Click;

            _view2 = new UIView (View.Bounds);
            _view2.AutoresizingMask = UIViewAutoresizing.All;
            _view2.BackgroundColor = UIColor.LightGray;
            RectangleF hideRect = _view2.Frame;
            hideRect.X = hideRect.X + hideRect.Width;
            _view2.Frame = hideRect;

            _button2 = UIButton.FromType (UIButtonType.RoundedRect);
            _button2.Frame = new System.Drawing.RectangleF (10, 10, 150, 44);
            _button2.SetTitle ("Back", UIControlState.Normal);
            _button2.TouchUpInside += Button2Click;

            _view1.Add (_button1);
            _view2.Add (_button2);

            View.Add (_view1);
            View.Add (_view2);
        }

        void Button1Click (object sender, EventArgs e)
        {
            UIView.Animate (.5f, 0, UIViewAnimationOptions.CurveEaseInOut, delegate {
                _view2.Frame = View.Frame;

                RectangleF hideRect = _view1.Frame;
                hideRect.X = hideRect.X - hideRect.Width;
                _view1.Frame = hideRect;
            }, 
            null);
        }

        void Button2Click (object sender, EventArgs e)
        {
            UIView.Animate (.5f, 0, UIViewAnimationOptions.CurveEaseInOut, delegate {
                RectangleF hideRect = _view2.Frame;
                hideRect.X = hideRect.X + hideRect.Width;
                _view2.Frame = hideRect;

                _view1.Frame = View.Frame;
            }, 
            null);
        }
    }
}