たくまる @takeshikato ?

2 年と 7 か月前に活動
  • たくまる が講義お題「UIImageView使用時のメモリ枯渇について」を開始しました (寺子屋 アバター教えて!iPhoneアプリ開発全般):   2 年と 8 か月前 · 表示

    現在、パラパラ漫画を制作しているXcode初心者のものです。
    以前も当ページを活用させていただき大変感謝しております。
    初歩的な質問とは思いますが、いろいろと調べても自分で解決することが出来ず困っております。
    どうぞご教授下さいますようお願い申し上げます。

    本がめくれるように見せるため、ViewControllerにViewを設置し、そのViewの中にUiImageを配置して画像をUiImageに読み込むように制作しております。

    また、Viewの部分をUIViewAnimationTransitionCurlUpによってページがめくれるようにしております。

    画像は、事前にAllPagesという配列に読み込んでおります。
    self.AllPages=;
    for (int i=1; i<=TotalPageAmount; i++) {
    UIImage *image=];
    ;
    }

    具体的な処理のソースと致しましては、以下の処理をタイマーによって呼び出して処理を行っております。
    —————————————————————————————————————-
    ;
    ;
    ;
    ;
    PageIndex++;
    self.UiImage.image = ;
    ;
    —————————————————————————————————————-

    メニューよりパラパラ漫画を数種類選べるようにしており、各漫画が200ページ(1枚の画像サイズは40kb程度)です。

    これを実行すると、見れば見るほどメモリが使用されてしまいます。一度読み込んだものは、破棄されずそのままメモリに残っているように思われます。そのため、そのうちメモリワーニングが出てきてアプリが落ちてしまうという現象が起こっております。

    ご教授いただくのに情報が不足している場合もあるかと存じますが、
    どうぞ、ご指導くださいますようよろしくお願い申し上げます。

  • たくまるアバター教えて!iPhoneアプリ開発全般 寺子屋に参加しました   2 年と 8 か月前 · 表示

  • たくまる が講義お題「ぺージをめくる処理について」を開始しました (寺子屋 アバター教えて!iPhoneアプリ開発全般):   5 年前 · 表示

    現在、UIViewControllerを用いて、
    ;
    と処理を組んで、次のページをめくるようにしていますが、このトランジションをPage-BasedApplicationのフリック操作のように、(横にスライドするのではなく)横にページをめくる処理にしたいと思っています。

    逆に、Page-BasedApplicationを使わずプログラムを組んでいるかと申しますと、一ページ目をタッチ(もしくはフリック操作)したら、2ページ目以降を、タイマーにより1秒ごとに自動でめくるようにしたかったからです。

    本を読んだのですが、Page-BasedApplicationで自動でページをめくる例を見つけることが出来なかった(UITableと仕組みが同じような記載もあったため出来ないのだと思い込んだ)ので、結果、現在はUIViewControllerを使用しています。

    やりたい内容としましては、自動(タイマー処理)で、本のように横にページをめくりたいと思っています。

    実現が可能なことか否か、可能であれば、どのようにプログラミングをすべきかご教授いただけませんでしょうか。

    よろしくお願い申し上げます。

  • >mipoiapp様

    ありがとうございます!!
    NSLogでも、バックグラウンドの別スレッドで動作していることを確認できました。
    本当にありがとうございました。
    周りに誰も知識のある人もおらず、本を何冊買って読んでもわからなかった所でした。本当に、こういった場所があること、こうして惜しげも無く、長年で得た知識を披露いただけたmipoiapp様に感謝申し上げます。

    本当にありがとうございました。
    また、初歩的な質問をさせていただくかもしれませんが、よろしくご教授いただけますようお願い申し上げます。

  • >mipoiapp様

    いえ、私の理解が及ばず申し訳ございません。
    何度もの補足説明まで詳細にいただきありがとうございます。

    恥ずかしながらperformSelectorOnMainThread:withObject:waitUntilDone。。。知りませんでした。ありがとうございました。

    大変申し訳ないのですが、以下についてご教授いただけませんでしょうか。
    1. スレッドタイマイベントFire

    私の理解で以下を記載しますと、

    ;

    ですと、当然メインスレッドで行われると考えました。
    その為、performSelectorInBackground: withObject:を用いてバックグラウンド処理にしようと考えました。

    その際に、セレクタの指定方法がどうしてもわかりません。

    考えたこと1)
    Timerインストール時のselectorに、performSelectorInBackgroundを指定する?
    ;

    - (void) pre_background {
    performSelectorInBackground:@selector(onFireTimer:)
    }

    これではダメですよね。

    考えたこと2)
    Timerインストールを、performSelectorInBackgroundのselectorで行う?

    - (void) toBackground{
    ;
    }

    これもダメでした。

    理解が乏しいため、失敗例をかくのがとても恥ずかしいのですが、どうか、ご理解いただき、解決にお力添えをお願いいたします。

  • こんばんは。

    mipoiApp様

    ご返信ありがとうございました。
    おっしゃる検索ワードでいろいろと調べてみました。

    すみません。
    あまり知識がないせいで以下のような結論にいたっております。

    「UI処理を含むタイマー処理」および「画面遷移処理」が両者ともに各々『異なる画面』をいじっている内容になってしまっていることから、私の理解では、タイマー処理内のUI処理を切り離せないなら、実現は困難という解釈にいたっております。

    mipoiApp様のおっしゃっている別スレッドでの動作を可能とする条件は、
    「タイマー処理において、UI処理が含まれていない場合」
    つまり、言葉を裏返せば、
    「タイマー処理において、UI処理を切り離せないなら不可」
    と認識させていただいております。

    この認識から、
     1)タイマー内の処理をUI処理と以外の処理に分割
     2)タイマー処理はNSOperationのサブクラスをインスタンス化して別スレッドで行う
    という結論でおります。

    正しいでしょうか。
    何度もの同じような質問で申し訳ございません。

  • mipoiApp様

    ご返信いただきありがとうございます。

    >カウントダウンの制御はNSTimerを利用しているのでしょうか?
     →はい。NSTimerを使用しています。

    >ただ、タイマ発火時にUI処理を一緒にしている要な場合だと、UI処理はメインスレッドでなければダメなので、・・・・・
     →はい。おっしゃる通り、UI処理を一緒にしてしまっています。

    >非メインスレッドでタイマ処理を行わせる必要があると思います。
     →かしこまりました。

    一旦、自分のソースを見直し、UI処理とタイマ処理の構成を考え直してみます。
    また、mipoiApp様からいただいた内容でネットを調べていた所、NSOperationやNSThreadというものを見つけました。勉強しながら、再度見直してみます。

    UINavigation以降のルール画面を別スレッドで動作させることは可能なのでしょうか?

  • 現在、カウントダウンタイマーを制作しています。
    メイン画面はUIViewControllerで作成し、カウントダウンタイマーの進行が表示されるようになっており、進行している最中にルール画面(NavigationController→TableViewController)を閲覧することができるような仕様を考えております。

    その際、以下のような事象が発生しましたが解決できないため、ご質問させていただきます。解消方法をご教授いただけますようよろしくお願いいたします。

    ■発生事象
    バックグラウンドでカウントダウンタイマーが作動している時に、TableViewControllerを上下にドラッグ操作/フリック操作すると、バックグランドで動作しているカウントダウンタイマー(およびViewController)が異常動作を起こす。

    ■具体的な異常動作
    1)10秒前から1秒ごとになるアラームが、止まったり、鳴らなくなったり、1秒おきでなくなったりする。
    2)ドラッグ操作/フリック操作の操作時間によって上記1)の長さや現象が組合わさる。

    ただし、タップ操作のみであれば、問題なく画面遷移/カウントダウンタイマーは動作します。

    画面遷移【メイン画面(ルールボタン)】
    - (IBAction)ToRuleView:(id)sender {
    BasketTableViewController *baskettableviewcontroller = initWithNibName:@”baskettableviewcontroller” bundle:nil];
    ;
    }

    画面遷移【ルール画面(戻るボタン)】
    - (IBAction)ToMainView:(id)sender {
    ;
    }

    よろしくお願いいたします。

  • たくまるアバター教えて!iOS Dev Center関連 寺子屋に参加しました   5 年と 1 か月前 · 表示

  • たくまる が講義お題「画面遷移でバックグラウンドで動くTimerの扱い方」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   5 年と 1 か月前 · 表示

    >andantino190様

    ご指摘ありがとうございました!
    ご指摘に基づき、もとの画面へ遷移するように記載し直したところ、正常に動くことが確認できました。

    感謝申し上げます。
    ありがとうございました。

  • たくまる が講義お題「画面遷移でバックグラウンドで動くTimerの扱い方」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   5 年と 1 か月前 · 表示

    【追記 改めてわかった現象の詳細】

    ルール画面からメイン画面に戻った時には、
     「完全にタイマーだけが分離してバックグラウンドで動いている状態」
    になっていると思います。

    この理由として、
     「アプリ起動時の状況と同じになっている」
    と思われるからです。

    実際、動いているタイマーの停止も効かなくなり、同様の設定のままスタートボタンを押すと、タイマーが同時に二つ動いている現象が発生します。

    以前の質問の内容は”勝手な私の理解”による説明でしたが、現象からすると、

    「タイマーをメイン画面から分離させない方法はありますか?」

    と質問する方が正しいかもしれないと思い、追記させていただきました。

    ご教授いただけますようよろしくお願いいたします。

  • たくまる が講義お題「画面遷移でバックグラウンドで動くTimerの扱い方」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   5 年と 1 か月前 · 表示

    >Morry様
    ご回答をいただきありがとうございました。
    早速、以下の様に試してみましたが、うまく行きませんでした。
     1⃣メイン画面の-(void)viewWillAppear:(BOOL)animated内に記載
     2⃣メイン画面の- (void)viewDidLoad内に記載

    ご回答にございました「画面の遷移自体どのような処理をしているのか」という点に付きましては、
     メイン画面 → NavigationController → ルール画面(TableViewController)
    (MainStoryboard内で「メイン画面内のルールボタン」と「ルール画面」をModal/crossDissolve)
     ルール画面(TableViewController) → NavigationController → メイン画面 
    (MainStoryboard内で「ルール画面内の戻るボタン」と「メイン画面」をModal/crossDissolve)

    としています。(スクリーンショット参照願います)

    具体的には、カウントダウンタイマーが動いている時に、暇つぶしの為に、用意したルールブックページを見ていられるようにすることが目的となります。

    再度お手間とは存じますが、ご教授願います。

  • たくまる が講義お題「画面遷移でバックグラウンドで動くTimerの扱い方」を開始しました (寺子屋 アバター教えて!iPhoneアプリ開発全般):   5 年と 1 か月前 · 表示

    タイトルが上手く表現できず申し訳ございません。

    現在、カウントダウンタイマーを作成しています。
    メイン画面・・・UIViewController<設定画面、ルール画面へ遷移可能>
    設定画面・・・・UIViewController<メイン画面に戻るのみ>
    ルール画面・・・UINavigationController<メイン画面に戻るのみ>
            →UITableViewController(ルールの項目)
            →UIViewController(ルールの詳細説明が面)
    として作っています。

    実現したいことは、
    「カウントダウンタイマーをスタートした後にルール画面へ遷移しても、カウントダウンタイマーは動いており、ルール画面からメイン画面に戻ってきたら、タイマーどおりに表示される」
    という、ごく当たり前の事柄です。

    現在抱えている問題は、
    「ルール画面へ遷移したとき、タイマーはバックグランドで動いているが、メイン画面に戻ってくると、描画されない。」
    という点です。

    メイン画面では
    1)タイマー開始ボタン押下時
    ;
    2)処理関数
    - (void)updateTime:(NSTimer*)timer{
    // 1.経過時間の取得(現時刻-スタート時刻)
    NSTimeInterval time = -startTime;
    // 2.残り時間の計算(設定値−経過時間)
    timeLeft = ceil(TimerStopedLeft-time);
    // 3.残り時間表示処理
    TopCountdownLabel.text=;<問題部分>
    ……..
    (アラーム機能)
    ……..
    }
    としており、通常のカウントダウンは正常に表示されます。

    ルール画面へ遷移した場合、
    タイマーは動いており、- (void)updateTime:(NSTimer*)timerの部分はバックグラウンドで正常に作動していると認識しています。

    しかし、ルール画面からメイン画面に戻ってきた場合、
    タイマーは正常に動いていることは確認していますが(アラームも正常に鳴る)、画面への描画がされません。(参照:上述<問題部分>)

    本当に初歩的で申し訳ございませんが、ご教授いただけますようよろしくおねがいいたします。

  • たくまる が講義お題「初めまして。よろしくおねがいします」を開始しました (寺子屋 アバター自己紹介などなど):   5 年と 1 か月前 · 表示

    このたび、友人と一緒にiPhoneのアプリを作ろうと考え、彼はデザイン担当、私はプログラム担当ということで始めました。以前はVBを中心にやっていた為、(Cは途中で脱落しました)今回、勉強しながらの開発をしています。初心者な質問が多いと思いますがどうぞご教授ねがいますようお願いいたします。

  • たくまるアバターできました!私のアプリ完成報告 寺子屋に参加しました   5 年と 1 か月前 · 表示

  • たくまるアバター自己紹介などなど 寺子屋に参加しました   5 年と 1 か月前 · 表示

  • たくまる が登録ユーザーになりました   5 年と 1 か月前 · 表示