2010-11-14 4 views
0

J'ai un court clip audio qui joue quand on appuie sur un bouton. Je veux créer un contrôleur coulissant à partir du bas qui contient un bouton pause/lecture et une barre coulissante affichant la longueur de l'audio. Je veux également que la vue derrière le contrôleur reste scrollable lorsque le contrôleur est visible. Je crois que cela exclut l'utilisation d'un UIAlertView ou d'UIActionSheetView car les deux font que l'affichage ci-dessous reste statique. Quelle est la meilleure façon de mettre en œuvre cela?Contrôleur de l'iPhone pour les commandes du lecteur audio

EDIT: je l'ai trouvé un tutoriel utile ici: http://iosdevelopertips.com/user-interface/sliding-views-on-and-off-screen-creating-a-reusable-sliding-message-widget.html

et j'ai pu modifier cela pour obtenir quelque chose de ce que je veux. Cependant, si je voudrais animer en utilisant un fichier nib où/comment pourrais-je appeler cela?

#import "SlidingMessageController.h" 


@interface SlidingMessageController(private) 
- (void)hideMsg; 
@end 

@implementation SlidingMessageController 
#pragma mark - 
#pragma mark Private Methods 


- (void)hideMsg; 
{ 
    // Slide the view off screen 
    CGRect frame = self.frame; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:.75]; 

    frame.origin.y = 480; 
    frame.origin.x = 0; 
    self.frame = frame; 

    //to autorelease the Msg, define stop selector 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; 

    [UIView commitAnimations]; 
} 

- (void)animationDidStop:(NSString*)animationID finished:(BOOL)finished context:(void *)context 
{ 
    [self removeFromSuperview]; 
    [self release]; 
} 

#pragma mark - 
#pragma mark Initialization 

- (id)initWithDirection:(int)dir; 
//- (id)initWithTitle:(NSString *)title message:(NSString *)msg 
{ 
    if (self = [super init]) 
    { 
     //Switch direction based on slideDirection konstant 
     switch (dir) { 
      case kSlideUp: //slideup 
       // Notice the view y coordinate is offscreen (480) 
       // This hides the view 

       // What should I be doing here if I want to get the nib file???  
       self.frame = CGRectMake(0,480,320, 90); 
       [self setBackgroundColor:[UIColor blackColor]]; 
       [self setAlpha:.87]; 


       newY = 380; 
       newX = 0; 
       myDir = 0; 
       break; 
       default: 
       break; 
     } 


    } 

    return self; 
} 

#pragma mark - 
#pragma mark Message Handling 

- (void)showMsgWithDelay:(int)delay 
{ 
// UIView *view = self.view; 
    CGRect frame = self.frame; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:.75]; 

    // Slide up based on y axis 
    // A better solution over a hard-coded value would be to 
    // determine the size of the title and msg labels and 
    // set this value accordingly 

    frame.origin.y = newY; 
    frame.origin.x = newX; 
    self.frame = frame; 

    [UIView commitAnimations]; 

    // Hide the view after the requested delay 
    [self performSelector:@selector(hideMsg) withObject:nil afterDelay:delay]; 

} 

#pragma mark - 
#pragma mark Cleanup 

- (void)dealloc 
{ 
    if ([self superview]) 
    [self removeFromSuperview]; 
    [super dealloc]; 
} 

@end 
+0

Je déconseille de le faire. Ce sera une interface déroutante et sera difficile à contrôler par programme. Il y a une raison pour laquelle les feuilles d'action sont modales. – TechZen

+0

S'il est bien exécuté, il pourrait certainement fonctionner à mon goût. Disons que vous appuyez sur un bouton pour démarrer la lecture d'un fichier audio. Les contrôles apparaissent alors en bas de l'écran pour vous permettre de lire/mettre en pause etc. à tout moment. Ne pensez pas que cela pourrait dérouter les utilisateurs. Encore une fois, si c'est fait correctement, bien sûr. – Rengers

+0

Je pensais à quelque chose de similaire à l'application NPR Music. C'est très bien fait et je pense que c'est une bonne solution à ce que je cherche. – alittlelost

Répondre

2

Qu'entendez-vous par «contrôleur coulissant»? Juste une vue qui glisse du fond? Si c'est le cas, vous pouvez simplement créer un UIView avec les boutons et l'animer. Pour l'animation, vous pouvez utiliser UIView beginAnimations:context: et commitAnimations.

+0

Je suis d'accord que vous voulez faire votre propre opinion. Vous pouvez également faire ce que fait Apple et faire disparaître le contrôle après une courte période plutôt que de glisser de haut en bas. Ensuite, il suffit d'avoir le contrôle si l'utilisateur tape (ne fait pas défiler) le scroller existant. – slycrel

Questions connexes