2

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

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

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

在此处输入图像描述

4

2 回答 2

2

你可以使用类似的东西:

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

让你的图像视图在被推送到导航控制器时翻转,而不是默认转换。ImageViewController 的 title 属性应该与您的详细信息中的相同。

的想法UINavigationController是处理多个控制器,因此您不应该通过覆盖视图来对抗它。

于 2012-12-03T18:58:05.473 回答
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);
        }
    }
}
于 2012-12-03T18:58:30.353 回答