質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1937閲覧

画像の保存→画面遷移までの処理を早くしたい

funkyfrea

総合スコア86

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/07/17 14:41

###前提・実現したいこと
swiftで日記アプリを作っています。

実現したいことは、ユーザーが選んだ写真4枚(asset)をUIImageに変換して、documentフォルダに保存後、画面遷移という一連の処理のスピードが遅いので、それを速くすることです。
速く処理が終わることもあるのですが、処理に時間がかかることもあり、まちまちな状況です。
他の日記アプリでは写真4枚をもっと速く保存することができるのですが、
何か処理を速くする方法があるのでしょうか。

よろしくお願いします。

###発生している問題・エラーメッセージ

assetをUIImageに変換する以下の部分で時間がかかってしまいます。

manager.requestImageForAsset(asset, targetSize:size , contentMode: .AspectFill, options: options, resultHandler: {(image,info)->Void in self.data = UIImageJPEGRepresentation(image!,1.0)

###該当のソースコード

swift

1 2 let options = PHImageRequestOptions() 3 // options.deliveryMode = PHImageRequestOptionsDeliveryMode.HighQualityFormat 4 options.networkAccessAllowed = true 5 options.synchronous = true 6 7 8 let asset = selectPhots[ind] 9 10 let manager = PHImageManager() 11 12 13 var minRatio:CGFloat = 1 14 15 if CGFloat(asset.pixelWidth) > UIScreen.mainScreen().bounds.width || CGFloat(asset.pixelHeight) > UIScreen.mainScreen().bounds.height{ 16 17 minRatio = min(UIScreen.mainScreen().bounds.width / CGFloat(asset.pixelWidth), UIScreen.mainScreen().bounds.height / CGFloat(asset.pixelHeight)) 18 19 } 20 21 22 let size:CGSize = CGSizeMake(CGFloat(asset.pixelWidth)*minRatio + 125, CGFloat(asset.pixelHeight)*minRatio) 23 24 manager.requestImageForAsset(asset, targetSize:size , contentMode: .AspectFill, options: options, resultHandler: {(image,info)->Void in 25 26 27 self.data = UIImageJPEGRepresentation(image!,1.0) 28 self.data?.writeToFile(filepath, atomically: true) 29 30 31 }) 32 33

###試したこと
ターゲットサイズを調整したり、optionのdeliveryModeなどを変更してみたりしましたが、スピード改善にはつながりませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

options.synchronous = trueをなくし、同期的処理ではなく、元々の非同期処理に戻すことで処理スピードが速くなりました。

投稿2016/07/18 03:30

funkyfrea

総合スコア86

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問