¿Cómo agrego una image desplazable / zoomable en MainView.xib de una aplicación de iPhone basada en services públicos?

He creado una aplicación basada en utilidades para iPhone en xcode. Básicamente tengo una vista principal y una vista lateral.

En la vista principal, tengo una image, así como un button y una label para ir a la vista de la otra cara.

Sin embargo, ¿cómo puedo hacer que la image se pueda ampliar / pinchar? Todos los tutoriales y el código que he visto se han basado en una aplicación basada en la vista y cuando vengo a copyrla, solo aparecen toneladas de errores.

Por ejemplo, no tengo una carpeta de Clases. ¿Puede alguien proporcionar un código de muestra para esto cuando elige Aplicación basada en utilidades en la window del nuevo proyecto cuando abre xcode.

Bien, ya que quieres un código, veo que es apropiado hacer un tutorial completo (¡estoy aburrido, hagámoslo!).

Abra Xcode e inicie un nuevo proyecto basado en Utilities (NO BASQUE EL ANTIGUO) y llámelo 'PinchZoomingImages' (sin las comillas). Asegúrate de que ARC esté apagado , me gusta codificar la forma antigua;). Selector de plantilla Xcode

Usaremos un UIScrollView con un UIImage en él. Entra en el 'MainViewController.h' apropiadamente llamado y pega en este código:

#import "FlipsideViewController.h" @interface MainViewController : UIViewController <FlipsideViewControllerDelegate, UIScrollViewDelegate> { //Both of these iVars are unnecessary with or without ARC, IBOutlet UIScrollView *scrollView; IBOutlet UIImageView * demoImageView; } //You can use 'strong' instead of retain, they both mean the same thing @property (nonatomic, retain) IBOutlet UIImageView * demoImageView; @property (nonatomic, retain) IBOutlet UIScrollView *scrollView; - (IBAction)showInfo:(id)sender; @end 

Necesitamos los pointers UIImageView y UIScrollView porque los UIImageView en el file .m. Habla del diablo, en el .m, pega esto en todo el asunto:

 #import "MainViewController.h" @implementation MainViewController //It is not necessary to @synthesize any properties if your Xcode version is >=4.5 @synthesize scrollView, demoImageView; #pragma mark - View lifecycle - (void)viewDidLoad { [scrollView setBackgroundColor:[UIColor blackColor]]; [scrollView setCanCancelContentTouches:NO]; scrollView.clipsToBounds = YES; // default is NO, we want to restrict drawing within our scrollview scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite; demoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"PDF-icon.png"]]; [scrollView addSubview:demoImageView]; [scrollView setContentSize:CGSizeMake(demoImageView.frame.size.width, demoImageView.frame.size.height)]; scrollView.minimumZoomScale = 1; scrollView.maximumZoomScale = 3; scrollView.delegate = self; [scrollView setScrollEnabled:YES]; [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)scrollViewDidZoom:(UIScrollView *)aScrollView {  CGFloat offsetX = (scrollView.bounds.size.width > scrollView.contentSize.width)?           (scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5 : 0.0;  CGFloat offsetY = (scrollView.bounds.size.height > scrollView.contentSize.height)?           (scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5 : 0.0;  mySubView.center = CGPointMake(scrollView.contentSize.width * 0.5 + offsetX,                  scrollView.contentSize.height * 0.5 + offsetY); } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // eg self.myOutlet = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for everything but the portrait-upside-down orientation return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } #pragma mark - Flipside View - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller { [self dismissModalViewControllerAnimated:YES]; } - (IBAction)showInfo:(id)sender { //Code created by the Utilities Template FlipsideViewController *controller = [[[FlipsideViewController alloc] initWithNibName:@"FlipsideViewController" bundle:nil] autorelease]; controller.delegate = self; controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:controller animated:YES]; } -(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView { return demoImageView; } @end 

¡CHILLIDO! ¿Notaste esta línea aquí ?:

 demoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"PDF-icon.png"]]; 

Eso bloqueará tu proyecto. debe arrastrar una image y copyr su nombre al pie de la letra (es CAsE SeNsTiVe) en el post [UIImage imageNamed:@"//your image name + extension"] .

Además, observe esta línea en el método -(void)viewDidLoad :

 scrollView.delegate = self; 

Es por eso que ponemos UIScrollViewDelegate en un par de estos: "<>" en el file .h, porque necesitamos anunciar al comstackdor que queremos "conformarnos" al protocolo UIScrollViewDelegate .

Y, por último, conecte esos IBOutlets (Por favor, conecte primero la vista si no está allí. Es una cosa básica y fácilmente olvidable): introduzca la descripción de la imagen aquí

y así es como se ve el producto final (tras el lanzamiento): introduzca la descripción de la imagen aquí

(Al hacer zoom, que puede hacer manteniendo presionado el button 'opción' en el simulador y arrastrando el mouse):

introduzca la descripción de la imagen aquí