2012-04-05 23 views
6

Mi piacerebbe sviluppare un'app con un menu simile all'app ios Linkedin. Ti piace questa (foto a sinistra)Menu di LinkedIn App per iPhone

enter image description here

C'è 4 scorci (miniature) che sono associati alle quattro viste principali. E la miniatura mostra sempre lo stato aggiornato della vista.

Mi piacerebbe sapere che possiamo fare un menu come questo?

Grazie in anticipo per il vostro aiuto!

Sébastien;)


Allora perché si fa a mettere il 4 UIView in un altro UIView e non direttamente sul UIViewController? E hai parlato dei pulsanti ma nel tuo esempio ci sono solo UIView? Mi chiedo se i 4 pulsanti sono sulle 4 viste e sono trasparenti per applicare la trasformazione.

Avete un esempio di codice per la trasformazione?

Grazie mille per il vostro aiuto!

+1

... ci vuoi ... cosa, esattamente? – badgerr

+0

Ok scusa! Ho dimenticato la domanda! –

risposta

1
- (void)viewDidLoad { 
[super viewDidLoad]; 
[self.navigationItem setTitle:@"About us"]; 

presentationViewController = [[PresentationViewController alloc] initWithNibName:@"PresentationViewController" bundle:nil]; 
secteursViewController = [[SecteursViewController alloc] initWithNibName:@"SecteursViewController" bundle:nil]; 
engagementsViewController = [[EngagementsViewController alloc] initWithNibName:@"EngagementsViewController" bundle:nil]; 
interviewsViewController = [[InterviewsViewController alloc] initWithNibName:@"InterviewsViewController" bundle:nil]; 

presentationApercu = presentationViewController.view; 
secteursApercu = secteursViewController.view;  
videosApercu = interviewsViewController.view; 
engagementsApercu = engagementsViewController.view; 

presentationApercu.transform = CGAffineTransformMakeScale(1/(320./107), 1/(367./122.)); 
presentationApercu.frame = CGRectMake(27., 18., presentationApercu.frame.size.width, presentationApercu.frame.size.height); 

secteursApercu.transform = CGAffineTransformMakeScale(1/(320./107), 1/(367./122.)); 
secteursApercu.frame = CGRectMake(185., 18., secteursApercu.frame.size.width, secteursApercu.frame.size.height); 

videosApercu.transform = CGAffineTransformMakeScale(1/(320./107), 1/(367./122.)); 
videosApercu.frame = CGRectMake(27., 196., videosApercu.frame.size.width, videosApercu.frame.size.height);; 

engagementsApercu.transform = CGAffineTransformMakeScale(1/(320./107), 1/(367./122.)); 
engagementsApercu.frame = CGRectMake(185., 196., engagementsApercu.frame.size.width, engagementsApercu.frame.size.height); 

presentationApercu.tag = 1; 
secteursApercu.tag = 2; 
videosApercu.tag = 3; 
engagementsApercu.tag = 4; 

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
[tap setNumberOfTapsRequired:1]; 
[presentationApercu addGestureRecognizer:tap]; 
[tap release]; 

tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
[tap setNumberOfTapsRequired:1]; 
[secteursApercu addGestureRecognizer:tap]; 
[tap release]; 

tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
[tap setNumberOfTapsRequired:1]; 
[videosApercu addGestureRecognizer:tap]; 
[tap release]; 

tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
[tap setNumberOfTapsRequired:1]; 
[engagementsApercu addGestureRecognizer:tap]; 
[tap release]; 

[self.view addSubview:presentationApercu]; 
[self.view addSubview:secteursApercu]; 
[self.view addSubview:videosApercu]; 
[self.view addSubview:engagementsApercu]; 

} 


#pragma mark - IBActions 

- (void)zoomReverse { 
[self.navigationItem setLeftBarButtonItem:nil]; 
UITapGestureRecognizer *tap = nil; 

switch (tagEnCours) { 
    case 1: 
     [self.view bringSubviewToFront:presentationApercu]; 

     tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
     [tap setNumberOfTapsRequired:1]; 
     [presentationApercu addGestureRecognizer:tap]; 
     [tap release]; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.5]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     presentationApercu.transform = CGAffineTransformMakeScale(1/(320./107), 1/(367./122.)); 
     presentationApercu.frame = CGRectMake(27., 18., presentationApercu.frame.size.width, presentationApercu.frame.size.height); 

     [UIView commitAnimations]; 

     break; 

    case 2: 
     [self.view bringSubviewToFront:secteursApercu]; 

     tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
     [tap setNumberOfTapsRequired:1]; 
     [secteursApercu addGestureRecognizer:tap]; 
     [tap release]; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.5]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     secteursApercu.transform = CGAffineTransformMakeScale(1/(320./107), 1/(367./122.)); 
     secteursApercu.frame = CGRectMake(185., 18., secteursApercu.frame.size.width, secteursApercu.frame.size.height); 

     [UIView commitAnimations]; 

     break; 

    case 3: 
     [self.view bringSubviewToFront:videosApercu]; 

     tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
     [tap setNumberOfTapsRequired:1]; 
     [videosApercu addGestureRecognizer:tap]; 
     [tap release]; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.5]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     videosApercu.transform = CGAffineTransformMakeScale(1/(320./107), 1/(367./122.)); 
     videosApercu.frame = CGRectMake(27., 196., videosApercu.frame.size.width, videosApercu.frame.size.height); 

     [UIView commitAnimations]; 

     break; 

    case 4: 
     [self.view bringSubviewToFront:engagementsApercu]; 

     tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
     [tap setNumberOfTapsRequired:1]; 
     [engagementsApercu addGestureRecognizer:tap]; 
     [tap release]; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.5]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     engagementsApercu.transform = CGAffineTransformMakeScale(1/(320./107), 1/(367./122.)); 
     engagementsApercu.frame = CGRectMake(185., 196., engagementsApercu.frame.size.width, engagementsApercu.frame.size.height); 

     [UIView commitAnimations]; 

     break; 

    default: 
     break; 
} 
} 

- (void)zoomAction:(UITapGestureRecognizer *)sender { 
[self.navigationItem setLeftBarButtonItem:[[[UIBarButtonItem alloc] initWithTitle:@"About us" style:UIBarButtonItemStyleDone target:self action:@selector(zoomReverse)] autorelease]]; 
tagEnCours = sender.view.tag; 
switch (sender.view.tag) { 
    case 1: 
     [self.view bringSubviewToFront:presentationApercu]; 
     [presentationApercu removeGestureRecognizer:[presentationApercu.gestureRecognizers objectAtIndex:0]]; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.5]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     presentationApercu.transform = CGAffineTransformIdentity; 
     presentationApercu.frame = CGRectMake(0., 0., presentationApercu.frame.size.width, presentationApercu.frame.size.height); 

     [UIView commitAnimations]; 

     break; 

    case 2: 
     [self.view bringSubviewToFront:secteursApercu]; 
     [secteursApercu removeGestureRecognizer:[secteursApercu.gestureRecognizers objectAtIndex:0]]; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.5]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     secteursApercu.transform = CGAffineTransformIdentity; 
     secteursApercu.frame = CGRectMake(0., 0., secteursApercu.frame.size.width, secteursApercu.frame.size.height); 

     [UIView commitAnimations]; 
     break; 

    case 3: 
     [self.view bringSubviewToFront:videosApercu]; 
     [videosApercu removeGestureRecognizer:[videosApercu.gestureRecognizers objectAtIndex:0]]; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.5]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     videosApercu.transform = CGAffineTransformIdentity; 
     videosApercu.frame = CGRectMake(0., 0., videosApercu.frame.size.width, videosApercu.frame.size.height); 

     [UIView commitAnimations]; 
     break; 

    case 4: 
     [self.view bringSubviewToFront:engagementsApercu]; 
     [engagementsApercu removeGestureRecognizer:[engagementsApercu.gestureRecognizers objectAtIndex:0]]; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.5]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     engagementsApercu.transform = CGAffineTransformIdentity; 
     engagementsApercu.frame = CGRectMake(0., 0., engagementsApercu.frame.size.width, engagementsApercu.frame.size.height); 

     [UIView commitAnimations]; 
     break; 

    default: 
     break; 
} 
} 
+0

Ecco il mio codice. –

+0

Non capisco, ho provato a mettere una tale Scrollview e tutto sembra funzionare senza problemi, continua a tremare e si vede abbastanza bene. Il ViewController che post ha qualcosa di speciale? Il loro background è pieno? – WhiteTiger

0

ritengo che tale applicazione è strutturata come segue:

UIViewController 
    | UIView 
    | UIView 
    | UIView 
    | UIView 
    | UIView 

Il primo contiene il controller della vista principale (quello contenente i pulsanti 4), questi vengono ridotti (presumo) una trasformazione e quindi la La vista è sovrapposta da una vista del secondario, il secondo requisito.

Questo è quello che penso, perché se provi a scorrere il tavolo e torni subito indietro, anche nella visualizzazione delle anteprime scorrendo.

Spero che sia stato di aiuto.

+0

Quindi perché metti i 4 UIView in un altro UIView e non direttamente su UIViewController? E hai parlato dei pulsanti ma nel tuo esempio ci sono solo UIView? Mi chiedo se i 4 pulsanti siano sulle 4 viste e siano trasparenti per applicare la trasformazione. Avete un esempio di codice per la trasformazione? Grazie mille per il vostro aiuto! –

+0

Ho fatto un esempio e ho presupposto che il sistema fosse quello presentato, ma non è una mia idea. Per esempio, in questo momento non posso lasciarti, sono al lavoro, ma solo 5 minuti provo a prendere uno schizzo – WhiteTiger

+0

Ok sto aspettando l'esempio. Grazie mille. –

0

considerano questo come un progetto da cui prendere spunto:

//.h 
#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 

@end 

//.m 
#import "ViewController.h" 

@interface ViewController() 

@property (nonatomic, strong) UIView *v1; 
@property (nonatomic, strong) UIView *v2; 
@property (nonatomic, strong) UIView *v3; 
@property (nonatomic, strong) UIView *v4; 

@end 

@implementation ViewController 

@synthesize v1 = _v1; 
@synthesize v2 = _v2; 
@synthesize v3 = _v3; 
@synthesize v4 = _v4; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _v1 = [[UIView alloc] initWithFrame:self.view.bounds]; 
    _v2 = [[UIView alloc] initWithFrame:self.view.bounds];  
    _v3 = [[UIView alloc] initWithFrame:self.view.bounds]; 
    _v4 = [[UIView alloc] initWithFrame:self.view.bounds]; 

    [_v1 setBackgroundColor:[UIColor redColor]]; 
    [_v2 setBackgroundColor:[UIColor yellowColor]]; 
    [_v3 setBackgroundColor:[UIColor blueColor]]; 
    [_v4 setBackgroundColor:[UIColor greenColor]]; 

    _v1.transform = CGAffineTransformMakeScale(1/(320./140.), 1/(460./210.)); 
    _v1.frame = CGRectMake(10., 10., _v1.frame.size.width, _v1.frame.size.height); 

    _v2.transform = CGAffineTransformMakeScale(1/(320./140.), 1/(460./210.)); 
    _v2.frame = CGRectMake(170., 10., _v2.frame.size.width, _v2.frame.size.height); 

    _v3.transform = CGAffineTransformMakeScale(1/(320./140.), 1/(460./210.)); 
    _v3.frame = CGRectMake(10., 240., _v3.frame.size.width, _v3.frame.size.height); 

    _v4.transform = CGAffineTransformMakeScale(1/(320./140.), 1/(460./210.)); 
    _v4.frame = CGRectMake(170., 240., _v4.frame.size.width, _v4.frame.size.height); 

    _v1.tag = 1; 
    _v2.tag = 2; 
    _v3.tag = 3; 
    _v4.tag = 4; 

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
    [tap setNumberOfTapsRequired:1]; 
    [_v1 addGestureRecognizer:tap]; 
    [tap release]; 

    tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
    [tap setNumberOfTapsRequired:1]; 
    [_v2 addGestureRecognizer:tap]; 
    [tap release]; 

    tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
    [tap setNumberOfTapsRequired:1]; 
    [_v3 addGestureRecognizer:tap]; 
    [tap release]; 

    tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
    [tap setNumberOfTapsRequired:1]; 
    [_v4 addGestureRecognizer:tap]; 
    [tap release]; 

    [self.view addSubview:_v1]; 
    [self.view addSubview:_v2]; 
    [self.view addSubview:_v3]; 
    [self.view addSubview:_v4]; 

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btn setFrame:CGRectMake(10, 10, 100, 30)]; 
    [btn setTitle:@"Close" forState:UIControlStateNormal]; 
    btn.tag = 1; 
    [btn addTarget:self action:@selector(zoomReverse:) forControlEvents:UIControlEventTouchUpInside]; 
    [_v1 addSubview:btn]; 

    btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btn setFrame:CGRectMake(10, 10, 100, 30)]; 
    [btn setTitle:@"Close" forState:UIControlStateNormal]; 
    btn.tag = 2; 
    [btn addTarget:self action:@selector(zoomReverse:) forControlEvents:UIControlEventTouchUpInside]; 
    [_v2 addSubview:btn]; 

    btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btn setFrame:CGRectMake(10, 10, 100, 30)]; 
    [btn setTitle:@"Close" forState:UIControlStateNormal]; 
    btn.tag = 3; 
    [btn addTarget:self action:@selector(zoomReverse:) forControlEvents:UIControlEventTouchUpInside]; 
    [_v3 addSubview:btn]; 

    btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btn setFrame:CGRectMake(10, 10, 100, 30)]; 
    [btn setTitle:@"Close" forState:UIControlStateNormal]; 
    btn.tag = 4; 
    [btn addTarget:self action:@selector(zoomReverse:) forControlEvents:UIControlEventTouchUpInside]; 
    [_v4 addSubview:btn]; 
} 

- (void)zoomReverse:(UIButton *)sender { 
    UITapGestureRecognizer *tap = nil; 

    switch (sender.tag) { 
     case 1: 
      [self.view bringSubviewToFront:_v1]; 

      tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
      [tap setNumberOfTapsRequired:1]; 
      [_v1 addGestureRecognizer:tap]; 
      [tap release]; 

      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:1]; 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

      _v1.transform = CGAffineTransformMakeScale(1/(320./140.), 1/(460./210.)); 
      _v1.frame = CGRectMake(10., 10., _v1.frame.size.width, _v1.frame.size.height); 

      [UIView commitAnimations]; 

      break; 

     case 2: 
      [self.view bringSubviewToFront:_v2]; 

      tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
      [tap setNumberOfTapsRequired:1]; 
      [_v2 addGestureRecognizer:tap]; 
      [tap release]; 

      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:1]; 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

      _v2.transform = CGAffineTransformMakeScale(1/(320./140.), 1/(460./210.)); 
      _v2.frame = CGRectMake(170., 10., _v2.frame.size.width, _v2.frame.size.height); 

      [UIView commitAnimations]; 

      break; 

     case 3: 
      [self.view bringSubviewToFront:_v3]; 

      tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
      [tap setNumberOfTapsRequired:1]; 
      [_v3 addGestureRecognizer:tap]; 
      [tap release]; 

      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:1]; 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

      _v3.transform = CGAffineTransformMakeScale(1/(320./140.), 1/(460./210.)); 
      _v3.frame = CGRectMake(10., 240., _v3.frame.size.width, _v3.frame.size.height); 

      [UIView commitAnimations]; 

      break; 

     case 4: 
      [self.view bringSubviewToFront:_v4]; 

      tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomAction:)]; 
      [tap setNumberOfTapsRequired:1]; 
      [_v4 addGestureRecognizer:tap]; 
      [tap release]; 

      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:1]; 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

      _v4.transform = CGAffineTransformMakeScale(1/(320./140.), 1/(460./210.)); 
      _v4.frame = CGRectMake(170., 240., _v4.frame.size.width, _v4.frame.size.height); 

      [UIView commitAnimations]; 

      break; 

     default: 
      break; 
    } 
} 

- (void)zoomAction:(UITapGestureRecognizer *)sender { 
    switch (sender.view.tag) { 
     case 1: 
      [self.view bringSubviewToFront:_v1]; 
      [_v1 removeGestureRecognizer:[_v1.gestureRecognizers objectAtIndex:0]]; 

      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:1]; 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

      _v1.transform = CGAffineTransformIdentity; 
      _v1.frame = CGRectMake(0., 0., _v1.frame.size.width, _v1.frame.size.height); 

      [UIView commitAnimations]; 

      break; 

     case 2: 
      [self.view bringSubviewToFront:_v2]; 
      [_v2 removeGestureRecognizer:[_v2.gestureRecognizers objectAtIndex:0]]; 

      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:1]; 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

      _v2.transform = CGAffineTransformIdentity; 
      _v2.frame = CGRectMake(0., 0., _v2.frame.size.width, _v2.frame.size.height); 

      [UIView commitAnimations]; 
      break; 

     case 3: 
      [self.view bringSubviewToFront:_v3]; 
      [_v3 removeGestureRecognizer:[_v3.gestureRecognizers objectAtIndex:0]]; 

      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:1]; 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

      _v3.transform = CGAffineTransformIdentity; 
      _v3.frame = CGRectMake(0., 0., _v3.frame.size.width, _v3.frame.size.height); 

      [UIView commitAnimations]; 
      break; 

     case 4: 
      [self.view bringSubviewToFront:_v4]; 
      [_v4 removeGestureRecognizer:[_v4.gestureRecognizers objectAtIndex:0]]; 

      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:1]; 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

      _v4.transform = CGAffineTransformIdentity; 
      _v4.frame = CGRectMake(0., 0., _v4.frame.size.width, _v4.frame.size.height); 

      [UIView commitAnimations]; 
      break; 

     default: 
      break; 
    } 
} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 

    [self setV1:nil]; 
    [self setV2:nil]; 
    [self setV3:nil]; 
    [self setV4:nil]; 
} 

@end 

Spero che possa aiutare.

+0

Ho provato il tuo esempio ma ho un sacco di cose strane con esso .. –

+0

Considerate che è stato creato al volo come un esempio, tuttavia, che cosa? – WhiteTiger

+0

Ho provato il tuo esempio ma ho un sacco di cose strane con esso .. Prima di tutto, tutte le thumbmails non sono le stesse delle mie viste:/ Ho una ScrollView che non può scorrere quando la vista viene portata in primo piano e che non è di buone dimensioni .. Ho solo la parte superiore di la mia vista tabella e le altre 2 visualizzazioni hanno una parte trasparente. Non capisco, hai un'idea? Ecco lo screenshot della mia vista: [link] (http://data.imagup.com/12/1148986155.2234png). Il mio codice è di sotto. Grazie mille! –