2012-04-09 9 views
1

これは、前のビューでボタンをクリックしたときに表示されるビューです。 テキストボックス、笑顔の画像、およびラベルは、xCodeによって作成されたあらかじめデザインされています。ユーザーエクスペリエンスの低下を引き起こすコンポーネントの初期化が遅い

ビューのコンポーネントが非常にゆっくりと初期化され、完全に読み込まれたときに最後に撮影される準備が整っている理由を確認するには、ビューのイメージとコードを参照してください。また、文字を入力すると非常に遅いですが、iOSがテキストボックスをタッチするたびに入力するキーボードで入力中に文字が非常にゆっくりと表示されます。

enter image description here

ビューのコード;

using System; 
using System.Drawing; 

using MonoTouch.Foundation; 
using MonoTouch.UIKit; 

namespace IstanbulCity 
{ 
    public partial class AskForNAme : UIViewController 
    { 
     public delegate void AskForNAmeClosingDelegate (AskForNAme form); 

     public event AskForNAmeClosingDelegate AskForNAmeClosed; 
     NSObject obs1; 
     float scrollamount = 0.0f; 
     float bottomPoint = 0.0f; 
     float yOffset = 0.2f; 
     bool moveViewUp = false; 

     public AskForNAme() : base ("AskForNAme", null) 
     { 


     } 

     public override void DidReceiveMemoryWarning() 
     { 
      // Releases the view if it doesn't have a superview. 
      base.DidReceiveMemoryWarning(); 

      // Release any cached data, images, etc that aren't in use. 
     } 

     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 


      // Perform any additional setup after loading the view, typically from a nib. 
     } 
     public override void ViewDidAppear(bool animated) 
     { 
      base.ViewDidAppear(true); 
       obs1 = NSNotificationCenter.DefaultCenter.AddObserver (
"UIKeyboardDidShowNotification", KeyboardUpNotification); 
      this.tbOwnerMailAdress.ShouldReturn += TextFieldShouldReturn; 
      this.tbOwnerBirthDay.ShouldReturn += TextFieldShouldReturn; 
      this.uivGuguPhoto.Image = UIImage.FromFile ("image/fcuk.jpeg"); 

     } 
     public override void ViewWillAppear(bool animated) 
     { 
      base.ViewWillAppear(false); 
      obs1 = NSNotificationCenter.DefaultCenter.AddObserver (
"UIKeyboardDidShowNotification", KeyboardUpNotification); 
      this.tbOwnerMailAdress.ShouldReturn += TextFieldShouldReturn; 
      this.tbOwnerBirthDay.ShouldReturn += TextFieldShouldReturn; 
      this.uivGuguPhoto.Image = UIImage.FromFile ("image/fcuk.jpeg"); 

     } 
     public override void ViewDidUnload() 
     { 
      base.ViewDidUnload(); 

      // Clear any references to subviews of the main view in order to 
      // allow the Garbage Collector to collect them sooner. 
      // 
      // e.g. myOutlet.Dispose(); myOutlet = null; 

      ReleaseDesignerOutlets(); 
     } 

     public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation) 
     { 
      // Return true for supported orientations 
      return (toInterfaceOrientation != UIInterfaceOrientation.PortraitUpsideDown); 
     } 

     void HandleIstanbulCityViewControllerClosed (babyAge form) 
     { 
      form.DismissModalViewControllerAnimated (true); 
      form = null; 
     } 



     partial void tbKadikoyHallEditDidEndOnExit (MonoTouch.Foundation.NSObject sender) 
     { 
      tbIstanbulName.ResignFirstResponder(); 
     } 



     private bool TextFieldShouldReturn (UITextField tf) 
     { 
      tf.ResignFirstResponder(); 
      if (moveViewUp) { 
       ScrollTheView (false); 
      } 
      return true; 
     } 

     private void KeyboardUpNotification (NSNotification notification) 
     { 
      ResetTheView(); 

      RectangleF r = UIKeyboard.BoundsFromNotification (notification); 

      if (this.tbOwnerMailAdress.IsEditing) { 
       //Calculate the bottom of the Texbox 
       //plus a small margin... 
       bottomPoint = (this.tbOwnerMailAdress.Frame.Y + this.tbOwnerMailAdress.Frame.Height + yOffset); 

       //Calculate the amount to scroll the view 
       //upwards so the Textbox becomes visible... 
       //This is the height of the Keyboard - 
       //(the height of the display - the bottom 
       //of the Texbox)... 
       scrollamount = (r.Height - (View.Frame.Size.Height - bottomPoint)); 
      } 
      else if (this.tbOwnerBirthDay.IsEditing) 
      { 
       bottomPoint = (this.tbOwnerBirthDay.Frame.Y + this.tbOwnerBirthDay.Frame.Height + yOffset); 
       scrollamount = (r.Height - (View.Frame.Size.Height - bottomPoint)); 
      } 
      else 
      { 
       scrollamount = 0; 
      } 

      //Check to see whether the view 
      //should be moved up... 
      if (scrollamount > 0) { 
       moveViewUp = true; 
       ScrollTheView (moveViewUp); 
      } else 
       moveViewUp = false; 
     } 

     private void ResetTheView() 
     { 
      UIView.BeginAnimations (string.Empty, System.IntPtr.Zero); 
      UIView.SetAnimationDuration (0.3); 

      RectangleF frame = View.Frame; 
      frame.Y = 0; 
      View.Frame = frame; 
      UIView.CommitAnimations(); 
     } 

     private void ScrollTheView (bool movedUp) 
     { 
//To invoke a views built-in animation behaviour, 
//you create an animation block and 
//set the duration of the move... 
//Set the display scroll animation and duration... 
      UIView.BeginAnimations (string.Empty, System.IntPtr.Zero); 
      UIView.SetAnimationDuration (0.3); 

//Get Display size... 
      RectangleF frame = View.Frame; 

      if (movedUp) { 
//If the view should be moved up, 
//subtract the keyboard height from the display... 
       frame.Y -= scrollamount; 
      } else { 
//If the view shouldn't be moved up, restore it 
//by adding the keyboard height back to the original... 
       frame.Y += scrollamount; 
      } 

//Assign the new frame to the view... 
      View.Frame = frame; 

//Tell the view that your all done with setting 
//the animation parameters, and it should 
//start the animation... 
      UIView.CommitAnimations(); 

     } 
    } 
} 

最近のバージョン - まだ同じユーザーエクスペリエンスが」遅いです!

using System; 
using System.Drawing; 

using MonoTouch.Foundation; 
using MonoTouch.UIKit; 

namespace IstanbulCity 
{ 
    public partial class AskForNAme : UIViewController 
    { 
     public delegate void AskForNAmeClosingDelegate (AskForNAme form); 

     public event AskForNAmeClosingDelegate AskForNAmeClosed; 


     public AskForNAme() : base ("AskForNAme", null) 
     { 


     } 

     public override void DidReceiveMemoryWarning() 
     { 
      // Releases the view if it doesn't have a superview. 
      base.DidReceiveMemoryWarning(); 

      // Release any cached data, images, etc that aren't in use. 
     } 

     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 


      // Perform any additional setup after loading the view, typically from a nib. 
     } 


     public override void ViewDidUnload() 
     { 
      base.ViewDidUnload(); 

      // Clear any references to subviews of the main view in order to 
      // allow the Garbage Collector to collect them sooner. 
      // 
      // e.g. myOutlet.Dispose(); myOutlet = null; 

      ReleaseDesignerOutlets(); 
     } 

     public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation) 
     { 
      // Return true for supported orientations 
      return (toInterfaceOrientation != UIInterfaceOrientation.PortraitUpsideDown); 
     } 

     void HandleIstanbulCityViewControllerClosed (babyAge form) 
     { 
      form.DismissModalViewControllerAnimated (true); 
      form = null; 
     } 







    } 
} 

答えて

2

これは初期化関連ではありません。 ViewDidAppearViewWillAppearの両方の通知を追加しています。 常にであり、アニメーションはすべてのキーボード通知(何も変更されていなくても)で呼び出されます。ResetTheView

私の推測では、ResetTheViewの方がより頻繁に呼び出していると思います。連続したアニメーションは、アプリケーションのパフォーマンスを殺しています。

これは、メソッドにConsole.WriteLineとカウンタを入れて確認できます。

+0

私は、キーボードの表示と消滅操作に関するすべての行を削除しました。今、ビューのコードは基本的なものだけで、まだ前と同じローディング時間のスピードでプレーンです。私は多くのことを期待していますか?それは絶対にテキストボックスを見るのにおよそ7秒かかるということですか?最初の視界では、境界がほとんど見えています.7〜8秒後には、テキストボックスが非常によく見えます。コードファイルの最新の行を更新します。 – theklc

+2

iOSアプリケーションの起動には数秒かかります(使用しているデバイスによって多少異なります)。 Appleは最初のアプリケーション状態のように見える*スプラッシュ*スクリーンを使用することをお勧めします。そのため、ユーザーはより速く表示されます(これは黒い画面よりもはるかに優れています)。 MonoTouch固有の**リリース**ビルドを使用してパフォーマンスをテストしていることを確認してください。 **デバッグ**ビルドは、アプリケーションの実際の/最終的なパフォーマンスを表示しないように、より大きい(デバッグシンボル)および遅い(最適化が少なく、デバッガに接続しようとします)。 – poupou

関連する問題