25

ユーザーがピンチして画像をズームインおよびズームアウトする 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)
    }
}

上記の追加は、まだインセット量を変更しているようです。

更新(画像追加)

最初の画像はデフォルトのレイアウトを示しています。ズームインすると残りが表示されます.....

ここに画像の説明を入力

4

3 に答える 3