Help us understand the problem. What is going on with this article?

UIImageのsizeを取得する方法注意点

More than 5 years have passed since last update.

目的:

SwiftでUIImageのsizeを取得する際の注意点をまとめる。
objective-cのサンプルを真似してSwiftに書き直すとはまる部分があるので簡単にまとめておきます。

内容:

拡大縮小や加工等をする場合にUIImageのサイズを取得しますが、そのときXcodeの補完機能を信じてコードを作成するといろいろとはまったので、そのはまった箇所をメモしておきます。

設定:

Image画像は別途準備します。その画像をUIImage(named:xxx)で読み込んでpropertyを作成しておきます。

test.swift
let mainImage = UIImage(named: "Image1")

UIImageのサイズを取得するにはXcodeの補完機能を使い以下のような方法で取得できます

test.swift
let width = self.mainImage?.size.width
let height = self.mainImage?.size.height

ここまでは問題ないです。
表示するために別途準備していたImageViewにmainViewを入れます。このような感じです。

test.swift
self.imageView.image = mainImage

はまるポイント:

私がしたかったのはimageViewをピンチアウトで拡大縮小したかったのでimageViewにScrollViewを付加しています。別途最大スケール等はしておきます。ピンチアウト時にimageViewのサイズを再計算する際にはまりました。
imageViewサイズを取得するのにXcodeの補完、及び先に示したUIImageの流れで

test.swift
var imageSize = self.imageView.image?.size
imageSize.width *= self.scrollView.zoomScale

としてしまいそうですが、これでは動きません・・・。
なぜなら計算をして自分自身の値を利用しそのが自分自身に値をいれるので暗黙的にunwrappeしてあげないといけません。正しくは以下となります。

test.swift
var imageSize = self.imageView.image!.size
imageSize.width *= self.scrollView.zoomScale

補完機能は便利ですが頼っていると痛い目に遭います・・・。
Objective-Cなら何も考えずできたので自由度が高かったですす。

BOPsemi
San joseで半導体エンジニアをしています。主にカメラ関連です。趣味の一環と今後のキャリアのために独学でGo, pythonを勉強しています。その成果として一部のCodeやKnow-howを投稿しています。
https://note.com/sv_engineer
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away