CodeBreaker
CodeBreaker

Reputation: 254

In a zoomable scrollview, how to determine the location of the content wrt the window?

I have a zoomable UIScrollView which contains a custom drawn view (two circles). When the view is zoomed, I want to know where the centres of the circles lie, wrt the App's window. Consider these steps: 1. The view at 1x

The view at 1X

enter image description here

The view zoomed at an arbitrary level, with the pinch focused on the first circle

enter image description here

The view zoomed at an arbitrary level, with the pinch focused on the top right corner
What I am meaning to ask is, if I were to lay another view containing a circle on top of the scroll view such that the circle in this view is concentric (need not be of the same size) with the smaller circle in the scroll view's view, where should the centre of the new circle be located?

Upvotes: 2

Views: 153

Answers (2)

Nikolai Ruhe
Nikolai Ruhe

Reputation: 81848

When using UIView's coordinate conversion methods it is not relevant that you custom view is embedded in a scroll view:

MyCustomCircleView *circleView;

CGPoint centerInLocalCoordinates = circleView.centerOfACircle;
CGPoint centerInWindowCoordinates = [circleView convertPoint:centerInLocalCoordinates
                                                      toView:nil];

Maybe window coordinates are not what you are looking for. Remember that the window's coordinate space is always in portrait orientation and with the home button at the bottom. When holding the device in landscape orientation, your coordinates are (of course) rotated.

It might be easier to convert to a superview's coordinates, for example your view controller's view's coordinate space.

Upvotes: 5

samson
samson

Reputation: 1152

Did you draw the circles? Some combination of scrollView.contentOffset, scrollView.contentSize, and scrollView.zoomScale is what you want. You can walk back the translation and scaling using those values.

Upvotes: 0

Related Questions