ユーザーがピンチして画像をズームインおよびズームアウトする iOS フォト アプリに似ています。
UIView > UIScrollView > UIImageView > UIImage
最初は、縮尺 1 未満にズームするという問題がありました。画像が中心から外れていました。私はこれを行うことでそれを修正しました:
func scrollViewDidZoom(scrollView: UIScrollView) {
let offsetX = max((scrollView.bounds.width - scrollView.contentSize.width) * 0.5, 0)
let offsetY = max((scrollView.bounds.height - scrollView.contentSize.height) * 0.5, 0)
scrollView.contentInset = UIEdgeInsetsMake(offsetY, offsetX, 0, 0)
}
これは、ズームアウトするときにうまく機能します。
UIImageコンテンツモードはaspectFitです
問題
ZOOM INで zoomScale が 1 を超える場合、スクロール ビューのインセットは、スクロール ビューに含まれる UIImage の周囲を囲む必要があります。これにより、UIImage を取り囲んでいたデッド スペースが取り除かれます。IE、ピンチまたはダブルタップによる拡大時の写真アプリ。
試した
func scrollViewDidZoom(scrollView: UIScrollView) {
if scrollView.zoomScale > 1 {
let imageScale = (self.imageView.bounds.width/self.imageView.image!.size.width)
let imageWidth = self.imageView.image!.size.width * imageScale
let imageHeight = self.imageView.image!.size.height * imageScale
scrollView.contentInset = UIEdgeInsetsMake(((scrollView.frame.height - imageHeight) * 0.5), (scrollView.frame.width - imageWidth) * 0.5 , 0, 0)
print (scrollView.contentInset.top)
}
else {
let offsetX = max((scrollView.bounds.width - scrollView.contentSize.width) * 0.5, 0)
let offsetY = max((scrollView.bounds.height - scrollView.contentSize.height) * 0.5, 0)
scrollView.contentInset = UIEdgeInsetsMake(offsetY, offsetX, 0, 0)
}
}
上記の追加は、まだインセット量を変更しているようです。
更新(画像追加)
最初の画像はデフォルトのレイアウトを示しています。ズームインすると残りが表示されます.....
