2011-07-13 12 views
0

UIImagePicker Controllerを使用して新しいnibファイルをロードするにはどうすればよいですか。だから、ユーザーは、カメラやアルバムから写真を撮った後、私はいくつかの編集を行うためのユーザーのための新しいペン先をロードしたいと思います。以下はdidFinishPickingMediaWithInfoです。現在のUIImageViewに画像をロードしたり、警告と警告を送信したりすることもできますが、新しいペン先をロードしようとしても、現在のペン先とエラーは表示されません。私は全部のアイオス・ノブですので、メソッドの使用が間違っている場合は、私に知らせてください。前もって感謝します。UIImagePickerControllerを使用して終了後にnibファイルをロードする

P.S.追加するだけで、新しいペン先を読み込むことができたとしても、前のペン先から情報をどのように渡すのですか?例えば。もしnib2から画像を選んだら、それをnib3に渡す方法は?

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
imageOverlay.image = [UIImage imageNamed:@"mask_overlay1.png"]; 
[imageOverlay release]; 

// Displaying image to the imageView 
imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

// Tried to load a new nib 
UIView *currentView = self.view; 

// Get the underlying UIWindow, or the view containing the current view. 
UIView *theWindow = [currentView superview]; 


//remove the current view and replace with myView1 
[currentView removeFromSuperview]; 

// set up an animation for the transition between the views 
CATransition *animation = [CATransition animation]; 
[animation setDuration:0.5]; 
[animation setType:kCATransitionPush]; 
[animation setSubtype:kCATransitionFromLeft]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 

[[theWindow layer] addAnimation:animation forKey:@"createPhotoView"]; 

} 

答えて

-1

私はあなたのアプリケーションのワークフローがどのようなものであるか見当がつかないが、あなたは、画像を選択した後に新しいビューを表示する必要がある場合、あなたはナビゲーションコントローラに新しいビューコントローラをプッシュいずれかの方法でそれをおそらく行う必要があります、またはそれをモーダルビューとして提示することによって、 これにより、写真の選択を求められた前の画面に簡単に戻ることができます。

あなたのアプリでは、UINavigationControllerを使用することにします。

最初のビューコントローラをルートビューコントローラとして使用して、ナビゲーションコントローラを初期化します。

次に、あなたのUIImagePickerのデリゲートメソッドでは、あなたがこのようなものだろう:あなたはCustomViewControllerと呼ばれるUIViewControllerのサブクラスを作成し、それはあなたがに割り当てることができるプロパティを作成することにより、値渡し

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    // Initialize your new view controller 
    CustomViewController *controller = [[CustomViewController alloc] initWithNibName:@"SecondView" bundle:nil]; 

    // Pass your custom view controller the image you just selected 
    controller.valueToPass = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

    [self.navigationController pushViewController:controller animated:YES]; 

    [controller release]; 

} 

を(valueToPassようで私の例)。

EDIT:

それだけビューコントローラの可視表示を切り替えることができます。 self.viewの値を変更するのと同じくらい簡単です。同じXIBファイルに2つのUIViewを配置し、両方のIBOutletsをコントローラに配置することができます。お使いのコントローラのコードでは、次に

@interface MyController : UIViewController { 

    IBOutlet UIView *view1; 

    IBOutlet UIView *view2; 

} 

// Follow this with properties for all of those IBOutlets as well 

:あなたはこのようになりますヘッダを持つことができ

- (IBAction)switchViews { 

    if ([self.view isEqualTo:view1]) { 
     self.view = view2; 
    } else { 
     self.view = view1; 
    } 

} 

これは動作しますが、私の知る限り、遷移を許可していません。代わりにこれを行うことができます:

- (IBAction)switchViews:(id)sender { 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:NO]; 

    if ([[secondaryView superview] isEqual:mainView]) { 
     [secondaryView removeFromSuperview]; 
    } else { 
     [self.view addSubview:secondaryView]; 
    } 

    [UIView commitAnimations]; 

} 

これらのオプションはどちらも機能し、両方のビューを制御するために同じビューコントローラを使用できます。ただし、ビューが異なるタスクを実行する場合は、異なるコントローラに関連付ける必要があります。コントローラーをヘッダーのプロパティーとして設定すると、異なるコントローラーを使用する場合も同様です。

- (IBAction)switchViews:(id)sender { 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:NO]; 

    if (self.secondaryController) { 
     [self.secondaryController.view removeFromSuperview]; 
     self.secondaryController = nil; 
    } else { 
     self.secondaryController = [[SecondaryController alloc] initWithNibName:@"SecondView" bundle:nil]; 
     self.secondaryController.valueToPass = @"I am passing this value!"; 
     [self.view addSubview:self.secondaryController.view]; 
    } 

    [UIView commitAnimations]; 

} 
+0

返信いただきありがとうございます。現時点では、nibsの移動にUINavigationControllerを使用していません。私は実際にすべてのナビゲーションを行うためのボタンを作ったばかりです。もし私がペン先を変更したいのであれば、removefromsuperviewとaddsubviewを使うだろう。それが間違ったアプローチの場合は、私に知らせてください。私はあなたのコードを私の中に実装できるかどうか試してみるつもりです。再度、感謝します。 – hakimo

+0

ビュー間の遷移が必要なようです。 UINavigationControllerはそれをあなたのためにも処理し、最適な解決策であるようです。ただし、ビューを変更するだけで、1つのコントローラからすべてをやりたければ、それも可能です。私は説明を追加します。 – Katfish

+0

もう一度お付き合いしています。 Heheええ、ナビゲーションコントローラは行く方法です。私はすぐにそれについて詳しく調べると思います。ほとんどの人がテーブルビューを使用していたので、Navigation Controllerのチュートリアルからかなり離れていました。ちょうど私が最近何かにそれを調整することができることがわかった。どうもありがとう。 – hakimo

関連する問題