切换到另一个视图,但留在导航控制器
问题描述:
我有一个关于特定产品的详细信息的导航控制器,其中一个细节是产品的小图像。现在我想添加一个按钮,该按钮必须通过产品的放大图像转到视图控制器。切换到另一个视图,但留在导航控制器
如何使放大后的图像与细节屏幕位于同一导航控制器上,并且屏幕翻转过渡,但标题栏和标签栏不会翻转。
在导航控制器上添加了两个视图的概览图。
答
您可以使用类似:
UIView.Transition(this.NavigationController.View, 1f,
UIViewAnimationOptions.CurveEaseInOut | UIViewAnimationOptions.TransitionFlipFromRight,
delegate { this.NavigationController.PushViewController(this.ImageViewController, false); });
要使图片视图翻转的navogation控制器上时得到推而不是默认的过渡。 ImageViewController的title属性应该与您的详细信息中的属性相同。
UINavigationController
的想法是处理多个控制器,因此您不应该通过覆盖视图来解决它。
答
将两个视图添加到控制器并为其帧属性设置动画以获得所需的效果。
请参阅下面的示例。
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);
}
}
}
你一定是在开玩笑。你击败了我30秒。 :) – holmes
我开始的方式提前但忘记完成答案,所以你被击败了至少15分钟,队友! :-) – Krumelur
我用你的转换代码,它与霍姆斯的解决方案一起工作,但在翻转过渡中,我有一个短时间的黑屏,翻转视图的背面也是黑色的,而不是视图去哪里。这是默认行为吗? – Renzzs