作者zonble (zonble)
看板MacDev
标题Re: [问题] 切换画面的问题
时间Tue Nov 2 03:49:13 2010
※ 引述《shiftsmart (居家物)》之铭言:
: 现在我正在学习view的切换
: 已经可以成功的切换view了
你这段 code 的问题很大:
- (IBAction)goTospoton:(id)sender {
SpotOnViewController *chang = [[SpotOnViewController alloc] init];
UIViewController *a=[[UIViewController alloc]init];
a.view=self.view;
[a release];
self.view=chang.view;
}
每次点一下按钮,就会生一个新的 SpotOnViewController,
然後 chang 这个物件都没有释放掉,多点个几次按钮,就会
记忆体漏水漏不停。
而且,ViewController 的功能就是负责管理 View,要进入到
另外一个画面,可以用 navigation controller 等方法,把
当前的内容换成是另外一个 View Controller 的 view,但是
你现在的作法却是不断把同一个 view controller 的 view
物件换掉,这样会让 View Controller 无法管理 View。
因此,实际上应用程式的行为也会不对,当你按下返回主画面
的按钮的时候,游戏里头的那些东西还是会继续跑,而且会跑
出一堆 GameOver 的 UIAlerView。
: 但是切成功了是切成功了
: 却不能点击
: 感觉好像是图层之间的问题~
你负责处理 touch 事件的程式是 touchesBegan:withEvent:,
这个东西来自 UIResponder,习惯上,通常会实作在 View,而
不是 View controller 里头,然後用 delegate 来处理。这样
MVC 的关系也才会比较清楚。
UIViewController 也继承自 UIResponder,照理说如果没有别
人拦截 touch 事件,而这个物件也在responder chain 上,就
应该要把事件传给你的 UIViewController subclass。但问题是,
你切换 view 的方法是直接修改 changview2ViewController 的
sel.view,所以,responder chain 上,还是 changview2ViewController
而不是 SpotOnViewController,所以事件根本就没传进来。
--
zonble.net
cocoa.zonble.net
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.42.179.249
1F:推 shiftsmart:感谢解答!! 11/03 16:24
2F:→ shiftsmart:我已经成功的把view给切换了! 11/03 23:58
3F:→ shiftsmart:navigation controller意外的好用! 11/03 23:58