How to enable scaling in ScrollView (iPhone)

I have a code that I want to modify in order to scale. Now my application only performs horizontal scrolling, but not scaling.

I missed something because I tried "viewForZoomingInScrollView:" without success. How can I zoom in?

thanks

#import <UIKit/UIKit.h> @interface IntroductionViewController : UIViewController <UIScrollViewDelegate>{ IBOutlet UIScrollView *scrollView; CGRect rectScrollView; int scrollWidth; int scrollHeight; NSArray *contentArray; UIColor *bcgColor; BOOL rememberPosition; NSString *positionIdentifier; } @property (nonatomic, retain) IBOutlet UIScrollView *scrollView; /// returns width of the scollview - (int)getScrollViewWidth; /// set width and height for your final UIScrollView - (void)setWidth:(int)width andHeight:(int)height; /// set the exactly same size as it is your parent view - (void)setSizeFromParentView:(UIScrollView *)scView; /// set background color for your UIScrollView - (void)setBackGroudColor:(UIColor *)color; /// set an array with images you want to display in your new scroll view - (void)setContentArray:(NSArray *)images; /// enable position history - (void)enablePositionMemory; /// enable position history with custom memory identifier - (void)enablePositionMemoryWithIdentifier:(NSString *)identifier; /// returns your UIScrollView with predefined page - (UIScrollView *)getWithPosition:(int)page; /// returns your UIScrollView with enabled position history - (UIScrollView *)getWithPositionMemory; /// returns your UIScrollView with enabled position history with custom memory identifier - (UIScrollView *)getWithPositionMemoryIdentifier:(NSString *)identifier; /// returns your UIScrollView - (UIScrollView *)get; @end 

and implementation:

 #import "IntroductionViewController.h" #define kIGUIScrollViewImagePageIdentifier @"kIGUIScrollViewImagePageIdentifier" #define kIGUIScrollViewImageDefaultPageIdentifier @"Default" @implementation IntroductionViewController @synthesize scrollView; - (int)getScrollViewWidth { return ([contentArray count] * scrollWidth); } - (void)setWidth:(int)width andHeight:(int)height { scrollWidth = width; scrollHeight = height; if (!width || !height) rectScrollView = [[UIScreen mainScreen] applicationFrame]; else rectScrollView = CGRectMake(0, 0, width, height); } - (void)setSizeFromParentView:(UIScrollView *)scView { scrollWidth = scView.frame.size.width; scrollHeight = scView.frame.size.height; rectScrollView = CGRectMake(0, 0, scrollWidth, scrollHeight); } - (void)setContentArray:(NSArray *)images { contentArray = images; } - (void)setBackGroudColor:(UIColor *)color { bcgColor = color; } - (void)enablePositionMemoryWithIdentifier:(NSString *)identifier { rememberPosition = NO; if (!identifier) identifier = kIGUIScrollViewImageDefaultPageIdentifier; positionIdentifier = identifier; } - (void)enablePositionMemory { [self enablePositionMemoryWithIdentifier:nil]; } - (UIScrollView *)getWithPosition:(int)page { if (!contentArray) { contentArray = [[[NSArray alloc] init] autorelease]; } if (page > [contentArray count]) page = 0; if (!scrollWidth || !scrollHeight) { rectScrollView = [[UIScreen mainScreen] applicationFrame]; scrollWidth = rectScrollView.size.width; scrollHeight = rectScrollView.size.height; } rectScrollView = CGRectMake(0, 0, scrollWidth, scrollHeight); self.scrollView = [[UIScrollView alloc] initWithFrame:rectScrollView]; self.scrollView.contentSize = CGSizeMake([self getScrollViewWidth], scrollHeight); if (!bcgColor) bcgColor = [UIColor blackColor]; self.scrollView.backgroundColor = bcgColor; self.scrollView.alwaysBounceHorizontal = YES; self.scrollView.contentOffset = CGPointMake(page * scrollWidth, 0); self.scrollView.pagingEnabled = YES; UIView *main = [[[UIView alloc] initWithFrame:rectScrollView] autorelease]; int i = 0; for (UIImage *img in contentArray) { UIImageView *imageView = [[UIImageView alloc] init]; imageView.image = img; imageView.contentMode = UIViewContentModeScaleAspectFit; imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); imageView.backgroundColor = [UIColor blackColor]; float ratio = img.size.width/rectScrollView.size.width; CGRect imageFrame = CGRectMake(i, 0, rectScrollView.size.width, (img.size.height / ratio)); imageView.frame = imageFrame; [self.scrollView addSubview:(UIView *)imageView]; i += scrollWidth; [imageView release]; } [main addSubview:scrollView]; //if (margin) [margin release]; [self.scrollView release]; [self.scrollView release]; return (UIScrollView *)main; } - (UIScrollView *)get { return [self getWithPosition:0]; } - (UIScrollView *)getWithPositionMemory { [self enablePositionMemory]; return [self getWithPosition:[[[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@%@", kIGUIScrollViewImagePageIdentifier, kIGUIScrollViewImageDefaultPageIdentifier]] intValue]]; } - (UIScrollView *)getWithPositionMemoryIdentifier:(NSString *)identifier { [self enablePositionMemoryWithIdentifier:identifier]; return [self getWithPosition:[[[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@%@", kIGUIScrollViewImagePageIdentifier, positionIdentifier]] intValue]]; } - (void)scrollViewDidEndDecelerating:(UIScrollView *)sv { int page = sv.contentOffset.x / sv.frame.size.width; if (rememberPosition) { [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%d", page] forKey:[NSString stringWithFormat:@"%@%@", kIGUIScrollViewImagePageIdentifier, positionIdentifier]]; [[NSUserDefaults standardUserDefaults] synchronize]; } } - (NSArray *)getImages { NSMutableArray *arr = [[[NSMutableArray alloc] init] autorelease]; // codice per intercettare la lingua impostata dall utente NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *languages = [defaults objectForKey:@"AppleLanguages"]; NSString *currentLanguage = [languages objectAtIndex:0]; NSLog(@"Codice lingua %@", currentLanguage); if( [currentLanguage isEqualToString:@"es"] ){ [arr addObject:[UIImage imageNamed:@"image1-intro.jpg"]]; [arr addObject:[UIImage imageNamed:@"image2-intro.jpg"]]; [arr addObject:[UIImage imageNamed:@"image3-intro.jpg"]]; [arr addObject:[UIImage imageNamed:@"image4-intro.jpg"]]; [arr addObject:[UIImage imageNamed:@"image5-intro.jpg"]]; [arr addObject:[UIImage imageNamed:@"image6-intro.jpg"]]; return (NSArray *)arr; } else { [arr addObject:[UIImage imageNamed:@"image1-intro.jpg"]]; [arr addObject:[UIImage imageNamed:@"image2-intro.jpg"]]; [arr addObject:[UIImage imageNamed:@"image3-intro.jpg"]]; [arr addObject:[UIImage imageNamed:@"image4-intro.jpg"]]; [arr addObject:[UIImage imageNamed:@"image5-intro.jpg"]]; return (NSArray *)arr; } } /* // The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { // Custom initialization } return self; } */ // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; //codice per mettere il titolo come immagine UIImage *titolo = [UIImage imageNamed: @"introTitle.png"]; UIImageView *titoloView = [[UIImageView alloc] initWithImage: titolo]; self.navigationItem.titleView = titoloView; IntroductionViewController *svimage = [[IntroductionViewController alloc] init]; [svimage setContentArray:[self getImages]]; [svimage setSizeFromParentView:scrollView]; [self.view addSubview:[svimage getWithPosition:0]]; [svimage release]; [titoloView release]; } /* // Override to allow orientations other than the default portrait orientation. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } */ - (void)didReceiveMemoryWarning { NSLog(@"memoria view"); // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // eg self.myOutlet = nil; } - (void)dealloc { [super dealloc]; } @end 
+4
source share
3 answers

and where is your implementation of viewForZoomingInScrollView? what does he return?

 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ return yourViewToBeZoomed; // } 

EDIT:

ok, therefore, in general, using this method, you simply indicate that you need to scroll when a user uses ads by moving 2 fingers on their scrollView ... usually (but not always) this is the first subvisor of UIScrollView itself ..

so if this is your case, just try this code:

 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ return [scrollView2.subviews objectAtIndex:0]; } 

and if you added more subViews and want to increase them, it’s better to add them NOT directly to your UIScrollView, but to your first subView, so they will scale with it ...

ciao

Luca

+2
source

Have you set the maximum ZoomScale? Either in code or in IB ...

0
source

It worked, Apple Photoscroller example Apple, it also used Tiling, but you can turn it off (competitively or just turn off the white lines). It also supports rotation.

here you can use regular images instead of tiled:

 - (void)configurePage:(ImageScrollView *)page forIndex:(NSUInteger)index { page.index = index; page.frame = [self frameForPageAtIndex:index]; // Use tiled images /* [page displayTiledImageNamed:[self imageNameAtIndex:index] size:[self imageSizeAtIndex:index]]; */ // To use full images instead of tiled images, replace the "displayTiledImageNamed:" call // above by the following line: [page displayImage:[self imageAtIndex:index]]; } 

And if you want to use Tiling (for large images) but don't want to see white lines here, this is the code (in ImageScrollView):

 - (void)displayTiledImageNamed:(NSString *)imageName size:(CGSize)imageSize { // clear the previous imageView [imageView removeFromSuperview]; [imageView release]; imageView = nil; // reset our zoomScale to 1.0 before doing any further calculations self.zoomScale = 1.0; // make a new TilingView for the new image imageView = [[TilingView alloc] initWithImageName:imageName size:imageSize]; /* [(TilingView *)imageView setAnnotates:YES]; // ** remove this line to remove the white tile grid ** */ [self addSubview:imageView]; self.contentSize = imageSize; [self setMaxMinZoomScalesForCurrentBounds]; self.zoomScale = self.minimumZoomScale; } 
0
source

Source: https://habr.com/ru/post/1344202/


All Articles