Now I have following view hierarchy:
- View
- Scroll View
- Container For Scale View
- Container For Rotate View
- Map Image View
- Arrow Image View
- Map Image View
- Container For Rotate View
- Container For Scale View
- Scroll View
My view hierarchy is a little complicated since I need both scale and rotate, and also I need to keep the relationship of position of map and arrow, I have been working around for a long time and find this solution.
Now My question is how to keep Arrow Image View always in center of screen when I scale?
Here is some of my code:
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return Container For Scale View
}
func scrollViewDidZoom(_ scrollView: UIScrollView) {
let imageViewSize = MapImageView.frame.size
let scrollViewSize = scrollView.bounds.size
let verticalPadding = imageViewSize.height < scrollViewSize.height ? (scrollViewSize.height - imageViewSize.height) / 2 : 0
let horizontalPadding = imageViewSize.width < scrollViewSize.width ? (scrollViewSize.width - imageViewSize.width) / 2 : 0
scrollView.contentInset = UIEdgeInsets(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding)
}