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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

0回答

237閲覧

[swift/iOS]iPhone11のみ画像からGIFアニメーションへの切り替えがうまくいかない

entaro12345

総合スコア75

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/12/04 06:35

編集2020/12/04 09:15

前提・実現したいこと

swift言語でiOSアプリの実装をしております。

画像からGIFアニメーションへ切り替える処理をしている箇所があるのですが、
iPhone11のみ切り換えがうまくいかないです。
(切替えというよりは、前の画像が残ったまま新しいアニメーションが動いてしまいます。)
ただ、iPhone8、iPhoneX、iPhoneXRではうまく切り替えられてることは確認できてます。

いくつか試してみたのですが、うまくいかないため質問させていただきました。
お力を貸してください。

スクショの切り取りです。
画像切替

該当のソースコード

swift

1import UIKit 2import SwiftyGif 3 4class ViewController: UIViewController { 5 6 var btnNext = UIButton() 7 var imgView = UIImageView() 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 // 画面サイズを取得する 13 let iWidthScreen = self.view.frame.size.width 14 let iHeightScreen = self.view.frame.size.height 15 16 // 画像 17 var img:UIImage 18 img = UIImage(named: "image1")! 19 imgView = UIImageView(image: img) 20 imgView.frame = CGRect(x: iWidthScreen * 0.38, y: iHeightScreen * 0.612, width: iWidthScreen * 0.24, height: iHeightScreen * 0.078) 21 self.view.addSubview(imgView) 22 23 // 切り替えボタン 24 btnNext.frame = CGRect(x: iWidthScreen * 0.1, y: iHeightScreen * 0.85, width: iWidthScreen * 0.8, height: 50) 25 btnNext.setTitle("画像切替", for: .normal) 26 btnNext.setTitleColor(UIColor.blue, for: .normal) 27 btnNext.layer.cornerRadius = 12 28 btnNext.addTarget(self, action: #selector(btnNext_touched), for: .touchUpInside) 29 self.view.addSubview(btnNext) 30 } 31 32 override func viewDidAppear(_ animated: Bool) { 33 } 34 35 // ボタン押下 36 @objc func btnNext_touched() { 37 38 // 前の画像削除 39 imgView.image = nil 40 41 // GIFアニメーション表示 42 var imgViewAnimate:UIImageView! 43 imgViewAnimate = UIImageView(gifImage: UIImage(gifName: "auto_setting"), manager: SwiftyGifManager(memoryLimit:20)) 44 imgViewAnimate.frame = CGRect(x: self.view.frame.size.width * 0.38, y: self.view.frame.size.height * 0.5, width: self.view.frame.size.width * 0.24, height: self.view.frame.size.height * 0.2) 45 self.view.addSubview(imgViewAnimate) 46 } 47}

試したこと

↓↓下記の方法も試してみましたがどれもNGでした
imgView.removeFromSuperview()
imgView.isHidden = true
imgView.image?.clear()

補足情報(FW/ツールのバージョンなど)

MacOS Catalina
Swift 4.2
Xcode 10.0

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

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

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

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

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

TsukubaDepot

2020/12/04 08:26

画像が残る、というのはどのような状態なのでしょうか。 シミュレータのスクリーンショットも併せてのせていただくといいかもしれません。
entaro12345

2020/12/04 08:31

コメントありがとうございます。 スクショ載せます。
thyda.eiqau

2020/12/04 08:34

なぜUIImageViewを毎回生成して毎回addSubViewしているのですか?imgView.imageを操作するのではダメなのですか?
TsukubaDepot

2020/12/04 08:41

ちなみに、ご提示いただいたコードはコンパイルできない(エラーが出る)のですが、間違ったコードを掲載されていないでしょうか。 btnNext_touched() 内の iWidthScreent は関数内で定義されていないため、このコードのままだとエラーがでます。 もう一度、よく見直してみて正しいコードに入れ替えていただけますでしょうか。
entaro12345

2020/12/04 08:45

失礼いたしました。 そもそも、画像の切り替えではなく、画像からGIFアニメーションへの切り替えでした。 そのため、ソースコードも修正しました。
TsukubaDepot

2020/12/04 09:06

画像の変更(サイズ変更を含む)については、 thyda.eiqau さんがご指摘の通りなのですが、そもそもやりたいことが違っていたわけですね。 コードが変更されたことは確認しましたが、ボタンのタイトルの設定部分がないようです。 このコードは、本当にスクリーンキャプチャで使ったコードと同じコードなのでしょうか。 スクリーンキャプチャ通りに動くコードを、今一度よく確認して載せてもらえますでしょうか。 あるいは、ご質問に載せられたコードを使ってプロジェクトを作成し、そのコードがバグと思っている部分を含めて想定通りに動いているのかまで再度確認してもらえますでしょうか。
entaro12345

2020/12/04 09:16

すみません。 固定文言や色の設定については、別ファイルで一括管理にしているため、省いていました。 実際の文言で修正しました。 恐れ入りますが、ご確認おねがいします。
TsukubaDepot

2020/12/04 09:26

本当にこのコードでコンパイルできるのでしょうか。 imgViewAnimate = UIImageView(gifImage: UIImage(gifName: "auto_setting"), manager: SwiftyGifManager(memoryLimit:20)) の行ですが、UIImage(gifName:) は エラーを投げるメソッドなので、 try を使ったエラーハンドリングを行わない限りコンパイルエラーとなってしますます。 https://github.com/kirualex/SwiftyGif のサンプルコードでも、UIImage(gifName:) は try と組み合わせて使っていますし、SwiftGifのソースを確認しても、拡張されたUIImage(gifName:)は失敗のあるイニシャライザとして定義してありました。 いずれにしても、このままではコンパイルが通らないため実証することができません。 このコードで本当にコンパイルが通っているのでしょうか。
entaro12345

2020/12/04 09:32

ご確認ありがとうございます。 はい、コンパイル通っており、動作もしております。 環境が古いせいで通ってしまうのですかね・・・。 すみません。
TsukubaDepot

2020/12/04 09:57

SwiftGif の GitHub をみてみましたが、ブランチが swift4 のコードだとエラーを投げないようになっているようですね。 ためしに、ブランチが swift4 のSwityGif を持ってきて、コンパイラの設定を Swift 4.2 に設定して実行しましたが、古い画像は消えるようです(ただし、フレームそのものは残っています)。 これ以上はこちらで再現しようがないため追跡はできませんが、たとえば 1. 通常の UIImage で作った画像を出力し、ボタンを押したら消すだけのプロジェクトを作る 2. ボタンを押したらSwiftGif で作った Animation Gif を表示するようにする 3. 上記の2つで問題なければ、1. と 2. を組み合わせたプログラムを作り実行する のように、ステップバイステップで試されるしか、原因を調べる方法はないと思います。
TsukubaDepot

2020/12/04 10:00

それ以前に、Catalina を使っているのに Xcode10/Swift 4.2 の環境を使う理由は何もないと思います。 Catalina もバージョンによって異なってきますが、macOS Catalina 10.15.4 であれば最新の Xcode 12.2 /Swift 5.3 が使える上、些細なトラブルも避けることができますので、ぜひ環境を変えられることをお勧めします。 実際、SwifyGif の swift4 ブランチはもはやメンテナンスされていませんので、今後なにかエラーが発生しても対応される可能性は低いと思われます。 https://developer.apple.com/jp/support/xcode/
entaro12345

2020/12/04 10:06

実行までしていただきありがとうございます。 原因究明のため、細かく地道にみていこうと思います。 >Catalina を使っているのに Xcode10/Swift 4.2 の環境を使う理由は何もないと思います。 おっしゃる通りです。 他のシステムのために、わざわざこのバージョンを使用しているのですが、そのうちバージョンを上げる予定です。 ご指摘いただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問