Swiftにて画像をタップした時の動作について
現在、読み込んだ一つの動画から複数のサムネイルを取得し横に並べるiOSアプリを作成しています。動画からサムネイルを取得し横に並べることはできたのですが,そこから1つのサムネイルをタップした時に別のUIImageViewにそのサムネイルを表示したいのですがうまくできません。
現状の手法として、UIImageViewを継承したクラスを作成し、その値をタップイベントの方に送っているのですが、値が0,1,2など数字ではなく15桁などのランダムな数字が出てしまいます。
なぜそのような値が返ってくるのかわからないので教えていただけると助かります。また別な方法で構いません。
以下、ソースコード、実行結果と参考にしたサイトになります。
ソースコード
import UIKit
import AVFoundation
import AssetsLibrary
class ViewController: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet weak var topimage: UIImageView!
@IBOutlet weak var scroll: UIScrollView!
let time = 20
class MyUIImageView: UIImageView{
let x:Int
let y:Int
init(x:Int,y:Int,frame:CGRect){
self.x = x
self.y = y
super.init(frame:frame)
}
required init(coder aDecoder: NSCoder) {
fatalError("*** init(coder:) has not been implemented")
}
}
override func viewDidLoad() {
super.viewDidLoad()
let filePath: URL = URL(fileURLWithPath: "動画のパス")
let asset = AVURLAsset(url: filePath, options: nil)
let imgGenerator = AVAssetImageGenerator(asset: asset)
imgGenerator.appliesPreferredTrackTransform = true
scroll.contentSize = CGSize(width: time * 100, height: 200)
scroll.bounces = false
self.scroll.isScrollEnabled = true
self.scroll.showsHorizontalScrollIndicator = false
do{
for x in 0...time - 1{
//位置を変えながらviewを作る
let iv : UIImageView = MyUIImageView(
x:x,
y:1,
frame:CGRect(x:CGFloat(x)*100, y:100, width:100, height:150))
//サムネイルの作成
let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(Int64(seconds / (time - x)), 3), actualTime: nil)
let thumbnail = UIImage(cgImage: cgImage)
//画像をviewに追加
iv.image = thumbnail
//タップジェスチャ
iv.isUserInteractionEnabled = true
iv.addGestureRecognizer(UITapGestureRecognizer(
target: self,
action: #selector(imageViewTapped)))
//画面に追加
scroll.addSubview(iv)
}
}catch let error {
print("*** Error generating thumbnail:\(error.localizedDescription)")
}
}
@objc func imageViewTapped(views:MyUIImageView, gestureRecognizer: UITapGestureRecognizer) {
//ここでxを取得できれば同じ上記と同じプログラムを書けば表示できると考えています。
print(views.x)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
実行結果
view at (140434724710272) is tapped //一つ目のサムネイル
view at (0) is tapped //二つ目のサムネイル
view at (140434743678464) is tapped //三つ目のサムネイル
view at (140434724710848) is tapped //四つ目のサムネイル