Matt Fellows
Matt Fellows

Reputation: 6532

Redraw text on zoomed UIImageView after zooming

I have an iOS app which boils down to the following:

In the drawRect method of the customised UIImageView I overlay some text at various positions on the image, the text can be at various sizes and angles, constrained by a rectangle defined by points on the image. So the co-ordinate system is all relative to the image associated with the UIImageView.

Sometimes the text is having to be rendered into areas that are far too small to allow the text to be readable at the default zoom level.

When I zoom in, however, this doesn't make the text any more readable as the text was rendered on the original UIImageView at the font size appropriate for the bounds it was given.

What I'd like is some way to redraw this text, in the correct location still, at a proportionally larger font size when zoomed in. Is this possible, and how would I do it?

Upvotes: 3

Views: 963

Answers (3)

Mark Pervovskiy
Mark Pervovskiy

Reputation: 1123

You can write your overlay text on UILabels, attached to the UIViewController view. Then you need to make your own custom class from UIScrollView and override

- (void)setContentOffset:(CGPoint)anOffset

here, using the anOffset and self.zoomScale you can place your labels at the places you want, with apropriate font size and all. So, they will change their positions every time your scrollview moves or zooms.

Upvotes: 2

Jonathan Zdziarski
Jonathan Zdziarski

Reputation: 326

Instead of trying to fix this, I'd say your design is a bit wrong. I'd reengineer this so that you're rendering the entire contents that you're displaying in the highest zoom that you want, and then allow the scrollview to zoom in/out of the finished content by specifying the zoom parameters. Otherwise you'll go insane trying to fix text. Just draw the entire image / document as big as you want it to be, then add THOSE contents to the scroll view, at some lower zoom, allowing the user to zoom in/out as they desire. Then you're done.

Upvotes: 2

Totumus Maximus
Totumus Maximus

Reputation: 7583

I've been working on a zoomable floorplan myself and dealt with it in a rather simple way.

I put my text in labels and put those labels on top of the ImageView. While zooming the labels scale with the UIImageView and thus the text within scale as well.

When zooming in too much however text becomes vague and blurry so you might want to update those text labels in the:

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale

For me this was sufficient, I hope this might be so for you as well.

Upvotes: 2

Related Questions