質問編集履歴

3

内容の追記

2018/09/21 16:22

投稿

RyomaD
RyomaD

スコア34

test CHANGED
File without changes
test CHANGED
@@ -22,4 +22,172 @@
22
22
 
23
23
 
24
24
 
25
+ コードは以下になります。
26
+
27
+ ```swift
28
+
29
+ @IBOutlet weak var mainStackView: UIStackView!
30
+
31
+ @IBOutlet weak var navigationLabel: UILabel!
32
+
33
+ @IBOutlet weak var finishEditingButton: UIButton! //編集の終了
34
+
35
+ @IBOutlet weak var editPhotoView: UIView! //トリミングで残す範囲を可視化するためのUIView
36
+
37
+ @IBOutlet weak var headerView: UIView!
38
+
39
+ @IBAction func cancelButton(_ sender: Any) {
40
+
41
+ dismiss(animated: true, completion: nil)
42
+
43
+ }
44
+
45
+
46
+
47
+ var image : UIImage!
48
+
49
+ var imageView : UIImageView! //トリミング対象画像を表示するためのUIImageView
50
+
51
+ var previousImages = [UIImage]()
52
+
53
+ var nextImages = [UIImage]()
54
+
55
+ var scaleZoomedInOut : CGFloat = 1.0 //拡大・縮小した時にはUIImageViewのサイズのみが変わるので、実際のUIImageのサイズとUIImageViewとの倍率の差を記録する
56
+
57
+ var previousScaleZoomedInOut = [CGFloat]()
58
+
59
+ var nextScaleZoomedInOut = [CGFloat]()
60
+
61
+
62
+
63
+
64
+
65
+ override func viewDidLoad() {
66
+
67
+ super.viewDidLoad()
68
+
69
+ }
70
+
71
+
72
+
73
+ override func viewDidAppear(_ animated: Bool) {
74
+
75
+ super.viewWillAppear(true)
76
+
77
+ finishEditingButton.addTarget(self, action: #selector(finishEdittingAlert), for: .touchUpInside)
78
+
79
+
80
+
81
+ editPhotoView.layer.borderColor = UIColor.black.cgColor
82
+
83
+ editPhotoView.layer.borderWidth = 1
84
+
85
+ setUpPinchInOutAndDoubleTap()
86
+
87
+
88
+
89
+ //load image and show UIImageView
90
+
91
+ let appDelegate = UIApplication.shared.delegate as! AppDelegate
92
+
93
+ image = appDelegate.photoLibraryImage
94
+
95
+ previousScaleZoomedInOut.append(scaleZoomedInOut)
96
+
97
+ createImageView(sourceImage: image, on: editPhotoView)
98
+
99
+ mainStackView.bringSubview(toFront: headerView)
100
+
101
+ }
102
+
103
+
104
+
105
+ //ピンチイン/アウト・ダブルタップの検出
106
+
107
+ func setUpPinchInOutAndDoubleTap(){
108
+
109
+ // ピンチイン・アウトの準備
110
+
111
+ let pinchGetsture = UIPinchGestureRecognizer(target: self, action: #selector(pinchAction(gesture:)))
112
+
113
+ pinchGetsture.delegate = self as? UIGestureRecognizerDelegate
114
+
115
+
116
+
117
+ self.editPhotoView.isUserInteractionEnabled = true
118
+
119
+ self.editPhotoView.isMultipleTouchEnabled = true
120
+
121
+
122
+
123
+ self.editPhotoView.addGestureRecognizer(pinchGetsture)
124
+
125
+ // ダブルタップの準備
126
+
127
+ let doubleTapGesture = UITapGestureRecognizer(target: self, action:#selector(doubleTapAction(gesture:)))
128
+
129
+ doubleTapGesture.numberOfTapsRequired = 2
130
+
131
+ self.editPhotoView.addGestureRecognizer(doubleTapGesture)
132
+
133
+ }
134
+
135
+
136
+
137
+ //画像の全体が把握できるように、画像本体(UIImage)の幅がスクリーンの幅よりも大きい時は、画像を画面の幅に合わせたUIImageViewとして表示するという処理を施す関数
138
+
139
+ func createImageView(sourceImage: UIImage, on parentView: UIView){
140
+
141
+ imageView = UIImageView(image: sourceImage)
142
+
143
+ // 画像の幅・高さの取得
144
+
145
+ let imageWidth = sourceImage.size.width
146
+
147
+ let imageHeight = sourceImage.size.height
148
+
149
+ let screenWidth = editPhotoView.frame.width
150
+
151
+ let screenHeight = editPhotoView.frame.height
152
+
153
+
154
+
155
+ if scaleZoomedInOut == 1.0{
156
+
157
+ if imageWidth > screenWidth{
158
+
159
+ scaleZoomedInOut = screenWidth/imageWidth
160
+
161
+ }
162
+
163
+ }
164
+
165
+
166
+
167
+ let rect:CGRect = CGRect(x:0, y:0, width:scaleZoomedInOut*imageWidth, height:scaleZoomedInOut*imageHeight)
168
+
169
+ imageView.frame = rect// ImageView frame をCGRectで作った矩形に合わせる
170
+
171
+ imageView.contentMode = .scaleAspectFill // Aspect Fill = 縦横の比率はそのままで短い辺を基準に全体を表示する
172
+
173
+ imageView.center = CGPoint(x:screenWidth/2, y:screenHeight/2) // 画像の中心をスクリーンの中心位置に設定
174
+
175
+
176
+
177
+ parentView.addSubview(imageView)
178
+
179
+ parentView.sendSubview(toBack: imageView)
180
+
181
+ }
182
+
183
+ ```
184
+
185
+ ご親切にコードでもアドバイスをいただいておりますがどうしても、
186
+
187
+ 横長の画像を出力する際にUIViewの縦の比率に対して画像の縦の長さに収まらずにいます。(ぴったりしない)
188
+
189
+
190
+
191
+
192
+
25
193
  よろしくお願いします。

2

内容の追記

2018/09/21 16:22

投稿

RyomaD
RyomaD

スコア34

test CHANGED
File without changes
test CHANGED
@@ -14,6 +14,12 @@
14
14
 
15
15
  ![イメージ説明](84c7e7c11e5bdaf4781f4fead12100c4.jpeg)
16
16
 
17
+ ちなみに Content Mode を Aspect Fillに設定した場合は、
18
+
19
+ 以下のように出力されます。
20
+
21
+ ![イメージ説明](78b2a599c14cf73eacf3a4928d936f45.png)
22
+
17
23
 
18
24
 
19
25
  よろしくお願いします。

1

内容の修正

2018/09/20 16:08

投稿

RyomaD
RyomaD

スコア34

test CHANGED
@@ -1 +1 @@
1
- swift4 UIImage上で画像を縦比率だけ保持して表示させたい。
1
+ swift4 UIViewの縦の比率に画像の縦合わせたい。
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ![イメージ説明](a4ac498c7704b7908f50530a804c033b.png)
10
10
 
11
- 以下のような形で表示させたいのですが、(縦の比率は保持したまま)やり方が解らずに困っています。どなたかご存知の方がいらっしゃればご教授いただけないでしょうか。
11
+ 以下のような形で表示させたいのですが、(UIViewの縦の比率に画像の縦を合わせる)やり方が解らずに困っています。どなたかご存知の方がいらっしゃればご教授いただけないでしょうか。
12
12
 
13
13
  コードでもstorybord上からでも構いません。
14
14