Reputation: 247
Now I have following view hierarchy:
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)
}
Upvotes: 4
Views: 785
Reputation: 16446
Here you need some Math
As your scale container view is larger as per your zoom scale you need to convert center
point relative to super UIView
lets say your Container For Scale View is viewBase
var center = self.view.center
after that convert your image point same
let convertedImagePoint = self.viewBase.convert(imageView.center, to: self.view)
Now get Difff
let diff = convertedImagePoint.y - center.y
DispatchQueue.main.async {
self.scrollView1.contentOffset.y += diff
}
Hope it is helps
Upvotes: 2