iphone - Center an UIImageView on the screen when zoom out -
i have uiimageview inside uiscrollview. want user can zoom , navigate image.
this work code:
//img uiimageview //scroller uiscrollview - (uiview *)viewforzoominginscrollview:(uiscrollview *)scrollview { return img; } - (void)viewdidload { [super viewdidload]; uiimage *image = [uiimage imagenamed:@"map_screen.png"]; img = [[uiimageview alloc] initwithimage:image]; scroller.delegate = self; scroller.autoresizessubviews = yes; scroller.autoresizingmask = uiviewautoresizingflexibleheight | uiviewautoresizingflexiblewidth; scroller.contentsize = img.frame.size; scroller.scrollenabled = yes; scroller.directionallockenabled = no; scroller.userinteractionenabled = yes; cgsize ivsize = img.frame.size; cgsize ssize = scroller.frame.size; float scalex = ssize.width / ivsize.width; float scaley = ssize.height / ivsize.height; scroller.minimumzoomscale = fmin(1.0, fmax(scaley, scalex)); scroller.zoomscale = fmin(1.0, fmax(scalex, scaley)); [scroller addsubview:img]; img.userinteractionenabled = yes; }
all works, happened: minimum zoom height of screen. image has width bigger height, want minumum zoom width.
if write
scroller.minimumzoomscale = fmin(1.0, scalex);
works, when user zooms out, image not @ center of screen, @ top.
i've tried this
cgpoint scrollcenter = [scroller center]; [img setcenter:cgpointmake(scrollcenter.x, scrollcenter.y)];
or
img.center = scroller.center;
but solution, image not completly scrollable, , if zoom out, stay again @ top of screen, not completly visible!
what can fix it?
you have manually while zooming in progress using scrollviewdidzoom delegate function... like
- (void)scrollviewdidzoom:(uiscrollview *)scrollview { // center image becomes smaller size of screen cgsize boundssize = scrollview.bounds.size; cgrect frametocenter = imageview.frame; // center horizontally if (frametocenter.size.width < boundssize.width) { frametocenter.origin.x = (boundssize.width - frametocenter.size.width) / 2; } else { frametocenter.origin.x = 0; } // center vertically if (frametocenter.size.height < boundssize.height) { frametocenter.origin.y = (boundssize.height - frametocenter.size.height) / 2; } else { frametocenter.origin.y = 0; } imageview.frame = frametocenter; }
Comments
Post a Comment