2010-12-06 18 views
3

Ich muss eine erweiterbare und zusammenklappbare UIView einer Art erstellen und kann nicht für eine Drittanbieter-Steuerelement bezahlen.So erstellen Sie eine reduzierbare UIView

Dies ist im Grunde, wie ich es verhalten möchte:

An der Spitze sollte es eine UIButton (oder ähnlich) sein, dass der Benutzer zwischen Auf- und Zuklappen hin- und herzuschalten.

Wenn erweitert, möchte ich in der Lage sein, andere UIView (z. B. Kalender) zu platzieren, und wenn die Steuerelemente eingeklappt sind, sollten die umgebenden Steuerelemente nach oben verschieben.

Hat jemand irgendwelche Ideen haben, wie man diese einfach implementieren - Noob hier :(

Antwort

7

Subclass ein Viewcontroller und zwei Methoden, die Ihre Schaltfläche wie ‚Zusammenbruch‘ abfeuern kann und ‚erweitern‘, dies könnte Ihnen den Einstieg: Sie können dynamisch neue Selektoren UIButtons zuweisen:

[button addTarget:self action:@selector(eventMethod:) 
    forControlEvents:UIControlEventTouchUpInside]; 

Code:

#define COLAPSED_HEIGHT 30 

-(void)expand 
    { 
     CGRect s= [self getScrerenBoundsForCurrentOriantation]; 
     CGRect f = self.view.frame; 
     f.origin.y =s.size.height-self.view.frame.size.height; 
     [UIView beginAnimations:@"expand" context:NULL]; 
     [UIView setAnimationDelegate:self]; 
     [UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];  
     self.view.frame=f; 

      //CHANGE YOUR EXPAND/COLLAPSE BUTTON HERE 

     [UIView commitAnimations]; 
     self.thumbScrollerIsExpanded=YES; 
    } 

    -(void)collapseView 
    { 
     //re-factored so that this method can be called in ViewdidLoad 
     CGRect s= [self getScrerenBoundsForCurrentOriantation]; 
     CGRect f = self.view.frame; 

     f.origin.y =(s.size.height-COLAPSED_HEIGHT); 

     self.view.frame = f; 

     self.thumbScrollerIsExpanded=NO; //thumbScrollerIsExpanded is a BOOL property 
    } 


    - (void)collapse 
    {  
     [UIView beginAnimations:@"collapse" context:NULL]; 
     [UIView setAnimationDelegate:self]; 
     [UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];  
     [self collapseView]; 
      //CHANGE YOUR EXPAND/COLLAPSE BUTTON HERE  
     [UIView commitAnimations]; 

    } 


-(CGRect)getScrerenBoundsForCurrentOriantation 
{ 
    return [self getScrerenBoundsForOriantation:[[UIDevice currentDevice] orientation]]; 
} 


-(CGRect)getScrerenBoundsForOriantation:(UIInterfaceOrientation)_orientation 
{ 
    UIScreen *screen = [UIScreen mainScreen]; 
    CGRect fullScreenRect = screen.bounds; // always implicitly in Portrait orientation.   

    if (UIInterfaceOrientationIsLandscape(_orientation)) 
    { 
     CGRect temp; 
     temp.size.width = fullScreenRect.size.height; 
     temp.size.height = fullScreenRect.size.width; 
     fullScreenRect = temp;  
    } 

    return fullScreenRect; 
} 

- (void)animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context 
{ 

    if ([animationID isEqualToString:@"expand"]) 
    { 
    //example 
    } 
else if ([animationID isEqualToString:@"collapse"]) 
    { 
    //example 
    } 
} 
0

Sie könnten versuchen, eine UIView Zugabe (entweder in xib oder programmatisch) aus scr Verwenden Sie dann eine UIView-Animation, um sie in Ihren Hauptansichtsbereich zu verschieben.

Die Schaltfläche hätte eine IBAction, die die Animation umschalten würde (Einschieben/Ausschieben). Sie können es aus dem Bildschirm schieben und dann die versteckte Eigenschaft von UIView auf true setzen. Wenn Sie die IBAction aufrufen, überprüfen Sie, ob die ausgeblendete Eigenschaft der Ansicht wahr ist. Wenn es ist, wissen Sie, um die Animation davon zu spielen, wenn nicht, dann spielen Sie die Animation des Herausgleitens.