アプリ版:「スタンプのみでお礼する」機能のリリースについて

毎回、初歩的な質問内容で申し訳ありませんが、困っているので教えて下さい。

「FirstViewController」はUIScrollViewでスクロールさせている画面で、タッチイベントを取得する為に UIScrollView のサブクラスを作っています。
そこでタッチすると、「SecondViewController」へ固定の画面で遷移するようにしたいのですが、「SecondViewController」の画面もそのままスクロール画面で表示されてしまいます。。。
「SecondViewController」をスクロールさせず、位置x=0 y=0で表示させるにはどうしたら良いのでしょうか?
詳しく教えて頂けると、大変助かります。。

↓FirstViewController.h↓
@interface FirstViewController : UIViewController{
  MyScrollview *controller;
IBOutlet UIScrollView *scrollView;
}

↓FirstViewController.m↓
- (void)viewDidLoad
{
controller = [[ MyScrollview alloc] initWithFrame:CGRectMake(0, 0, 1100, 1100)];
self.view = controller;
[super viewDidLoad];
[super loadView];
scrollView.contentSize = controller.frame.size;
[scrollView addSubview:controller];
}

↓MyScrollview .h↓
@interface MyScrollview : UIView<UIScrollViewDelegate>{
}
@end

↓MyScrollview .m↓
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event{
SecondViewController *svc;
svc = [[SecondViewController alloc] init];
[self addSubview:[svc view]];
}

A 回答 (2件)

根本的にプログラムの構成を設計し直すことをお勧めします。


iOSでは、Navigation Controllerや、TabBar Controllerを使って、画面遷移することが標準かつ推奨となっています。あなたのプログラムのように、Viewの上にViewを載せてを繰り返すと、むだにメモリを消費するばかりで、効率が悪いばかりでなく、メモリ不足に起因する、重大なエラーを導く危険があります。OSが用意してくれる画面遷移のシステムを使えば、メモリ配分も適切に行ってくれるので、効率的かつ安全ですし、ほかのiOSアプリと同等の使用感をユーザに与えてくれるので、「なにこれ、なんかださいんですけど」と不評を買うことが少なくなります。

Navigation Controllers
file:///Developer/Platforms/iPhoneOS.platform/Developer/Documentation/DocSets/com.apple.adc.documentation.AppleiOS4_3.iOSLibrary.docset/Contents/Resources/Documents/index.html#featuredarticles/ViewControllerPGforiPhoneOS/NavigationControllers/NavigationControllers.html%23//apple_ref/doc/uid/TP40007457-CH103-SW1

なんだかむずかしそうですが、画面遷移のプログラムは、完全にワンパターンでいけますので、一回プログラムを覚えれば、それを単純に繰り返すだけですみます。

さて、あなたのプログラムで、(画面遷移ではなく、単に)インスタンスcontroller(という名前のView)に、子ビュー(subview)として貼り付けた、インスタンスsvc.viewは、親ビューの親ビューであるインスタンスscrollViewの上にあるのですから、いっしょにスクロールするのは、あたりまえといえば、あたりまえです。svc.viewがscrollViewとリプレイスするようなプログラムでないと、ご希望の結果にはなりません。

それと、タップしただけで画面遷移するのは、やっぱりダサイですよ。スワイプ(Swipe)して遷移するようにしないと。なにせ、みんなこれをやりたくで、iPhoneやAndroidを使っているようなものでしょ?
    • good
    • 0
この回答へのお礼

迅速なご回答、ありがとうございます。
「Navigation Controller」でやはり作った方がやはり良いんですね。。
実機テストをするとメモリ不足のエラーメッセージも出ていて実際に困っていました。。
ただ、UIScrollViewだとタップやスワイプといったイベントはやはり、サブクラスで
書かなくてはいけないのでしょうか?それだと、また画面遷移の処理を書くのにまたはまってしまう予感が……
その時はまた質問させて下さい。
まずは、Navigation Controllerで一から作り直してみます!
本当にありがとうございました。

お礼日時:2011/06/26 00:45

すみません、リンクを間違えました。



Navigation Controllers
http://developer.apple.com/library/ios/featureda …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!