2012-04-05 16 views
6

Chciałbym stworzyć aplikację z menu, które wygląda jak aplikacja ios Linkedin. Tak (po lewej stronie obrazu)Menu LinkedIn iPhone app

enter image description here

Jest 4 przebłyski (miniatury), które są związane z czterema głównymi widokami. A miniaturka zawsze pokazuje zaktualizowany stan widoku.

Chciałbym wiedzieć, że możemy zrobić menu takie jak ten?

Z góry dziękuję za pomoc!

Sébastien;)


Więc dlaczego można umieścić 4 UIView w innym UIView, a nie bezpośrednio na UIViewController? A mówiłeś o przyciskach, ale w twoim przykładzie jest tylko UIView? Zastanawiam się, czy 4 przyciski są na 4 widoki i są przezroczyste, aby zastosować transformację.

Czy masz przykład kodu do transformacji?

Bardzo dziękuję za pomoc!

+1

... chcesz, żebyśmy ... co dokładnie? – badgerr

+0

Ok przepraszam! Zapomniałem pytania! –

Odpowiedz

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

Oto mój kod. –

+0

Nie rozumiem, próbowałem umieścić taki Scrollview i wszystko wydaje się działać bez problemów, nadal się trzęsie i widzisz dobrze. ViewController tego posta ma coś specjalnego? Ich pochodzenie jest pełne? – WhiteTiger

0

myślę, że ta aplikacja jest skonstruowany w następujący sposób:

UIViewController 
    | UIView 
    | UIView 
    | UIView 
    | UIView 
    | UIView 

Pierwszy zawiera główny sterownik widzenia (jeden zawierający 4 przyciski), te są zmniejszone przez (zakładam) transformacji, a następnie Widok jest nałożony na widok drugiego, drugiego wymogu.

To jest to, co myślę, ponieważ jeśli spróbujesz przewinąć stół i natychmiast wrócić, nawet w przewijaniu widoku miniatur.

Mam nadzieję, że to była jakaś pomoc.

+0

Dlaczego więc umieścić 4 UIView w innym UIView, a nie bezpośrednio na UIViewController? A mówiłeś o przyciskach, ale w twoim przykładzie jest tylko UIView? Zastanawiam się, czy 4 przyciski są na 4 widoki i są przezroczyste, aby zastosować transformację. Czy masz przykład kodu do transformacji? Bardzo dziękuję za pomoc! –

+0

Zrobiłem przykład i założyłem, że system jest tym, który zaprezentowałem, ale to nie jest mój pomysł. Na przykład, w tym momencie nie mogę ci pozwolić, jestem w pracy, ale tylko 5 minut próbuję zdjąć szkic – WhiteTiger

+0

OK Czekam na przykład. Wielkie dzięki. –

0

Potraktuj to jako projekt, z którego można czerpać inspirację:

//.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 

mam nadzieję, że może pomóc.

+0

Próbowałem twojego przykładu, ale mam z nim dużo dziwnych rzeczy. –

+0

Zastanów się, że został stworzony na bieżąco jako przykład, ale co? – WhiteTiger

+0

Próbowałem twojego przykładu, ale mam z nim wiele dziwnych rzeczy .. Przede wszystkim wszystkie miniatury nie są takie same jak moje widoki:/ Mam ScrollView, który nie może przewinąć, gdy widok jest przeniesiony na wierzch i który nie jest w dobrym rozmiarze. Mam tylko górę mój widok tabeli i 2 inne widoki mają przezroczystą część. Nie rozumiem, masz pomysł? Oto zrzut ekranu mojego widoku: [link] (http://data.imagup.com/12/1148986155.2234png). Mój kod jest poniżej. Wielkie dzięki! –

Powiązane problemy