NSTimer&UINavigationControllerに関する質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
どどんぱち

NSTimer&UINavigationControllerに関する質問

#1

投稿記事 by どどんぱち » 15年前

いつもお世話になっております。

iPhone / Objective-C で
作成中のアプリに関する質問です。

見せられないものが含まれており
プロジェクトごとアップすることが出来ませんので
UI 構造等を記述させていただきます。

わかりづらくて申し訳ありませんが、よろしくお願いします。


◆UI 構造 ---

① < 起動時 リスト表示シーン>
RootViewController(UITableViewController)
+ RootNavigationController(UINavigationController)

画面にはナビゲーションバー(上部)とテーブルが表示されています。
テーブルの任意のセルをタップすると、② < 画像描画シーン >に遷移します。

② < 画像描画シーン >
(上記の)RootNavigationController
+ ImgViewController(UIViewController)
+ GLImgView(UIView)

上部にナビゲーションバー(左側に①へ戻るボタンが自動で表示される)が
表示され、メイン画面には画像表示用のビューがあります。

-----

という構造で、②からナビゲーションバーの①に戻るボタンを押した際、
そのこと(戻るボタンを押したこと)を検知するのに、
GLImgViewのdealloc()を使用し、その中でrelease処理等を行うようにしています。

----- で、ここからが問題 -----

②のGLImgViewで画像をアニメーション表示させる為に、NSTimerを生成~開始すると
GLImgViewのdealloc()が呼ばれなくなり、ナビゲーションバーの戻るボタンで①に戻っても、
タイマーに設定した関数が呼ばれ続けます。タイマーの停止自体を、このdealloc()の中で
行うつもりでいましたので、処理の流れとして息詰まりました。

①に戻るボタンを押したことを検知し、
そこでタイマーを切る(もしくはタイマーを切るフラグをONにする)ようにしようかと
検索してみたものの、上記構造でナビゲーションバーに自動的に追加される「戻る」為の
ボタンの押下を取得する方法(どこに記述するかも含め)がわかりません。

①の方はxibを持たずに実装しています。

このような状態なのですが、

タイマーをdeallocで停止させる方法(これはOS側参照とかの問題で無理なのでしょうか)
か、ナビゲーションバー上のボタン(戻るボタン)の押下チェックを行う方法を、ご教授頂ければと思います。

よろしくお願いします。

Justy

Re:NSTimer&UINavigationControllerに関する質問

#2

投稿記事 by Justy » 15年前

 あー、NSTimerはシステムが、GLImgViewは NSTimerが retainしていて
NSTimerをシステムから releaseしないと、GLImgViewの deallocが呼ばれない、ってやつですね。
 
NSTimerは GLImgViewの viewWillDisappearでinvalidateしておけば
システムから NSTimerが releaseされ、GLImgViewの deallocが呼ばれたはずですよ。

どどんぱち

NSTimer&UINavigationControllerに関する質問

#3

投稿記事 by どどんぱち » 15年前

Justyさん
いつも、ありがとうございます。

お教え頂いた方法で無事、タイマーを停止できました。
RootNavigationController のviewWillappearの方でも
いけることを確認しました。

また、ナビゲーションコントローラーを使用した場合の
自動で追加される「戻るボタン」の押下を取れる方法
(どこにイベント受け取りの関数を記述すればよいか)
がありましたら、ご教授頂けたら幸いです。

Justy

Re:NSTimer&UINavigationControllerに関する質問

#4

投稿記事 by Justy » 15年前

>自動で追加される「戻るボタン」の押下を取れる方法
 大抵の場合 viewWillDisappearで事足りると思いますが、ボタンのイベントじゃないと
ダメなのですか?

 そこはシステムが持っているんで、ボタン内容とかは変えられても、押下イベントは
とれないんじゃないかとかと思います。
(知らないだけで存在する可能性は大いにありますけど)

 今提示できるアイデアとしてシステムのボタンを非表示にして自分で leftBarButtonItemにイベントを
とれるようにしたボタンをセットする、くらいです。

どどんぱち

Re:NSTimer&UINavigationControllerに関する質問

#5

投稿記事 by どどんぱち » 15年前

Justyさん
レスありがとうございます。

ナビゲーションコントローラーの方に関して。
すみません。私が知らないだけで、ボタン押下のイベントを取れるのではないかと
思っており、まだ学習中の身なので、学んでおけたらなということで、おうかがいしました。

それぞれのUIの使い方も学習して、ツールを作成する上での設計等も、もっとしっかり出来るように
していきたいと思っております。今後も、何かと質問させていただくと思いますが、よろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る