Пользовательская кнопка паузы воспроизведения Iphone - PullRequest
1 голос
/ 16 февраля 2010

Я хотел бы спросить, как лучше всего добиться следующего кодирования с какао для IPhone.

В качестве учебного упражнения я хотел бы сделать очень простой mp3-плеер. В настоящий момент меня больше всего интересуют пользовательские визуальные компоненты для этого игрока.

В частности, как сделать пользовательскую кнопку паузы воспроизведения с состояниями наведения мыши и наведения мыши?

Кроме того, я хотел бы, чтобы «ящик» открывался и закрывался в зависимости от того, какая кнопка воспроизведения / паузы показывает состояние воспроизведения или паузы.

Когда нажата кнопка воспроизведения, значок кнопок меняется на значок паузы, и ящик открывается. Когда нажата пауза, значок паузы меняется на значок воспроизведения, и ящик закрывается.

Должен ли я смотреть на кварц для этого?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2010

Нет необходимости использовать кварц.

Начните с UIButton. Вы можете назначить только одно изображение для кнопки (и оно будет обрабатывать выделение при касании) или назначить другое изображение для каждого состояния кнопки, если вы хотите настроить внешний вид при выделении (setImage:forState:). Чтобы добиться эффекта переключения между воспроизведением и паузой, вы должны заменять изображения кнопки при каждом нажатии (в вашем действии для UIControlEventTouchUpInside).

Для анимации выдвижного ящика создайте UIView, который будет служить выдвижным ящиком, и добавьте его в основной вид. Отрегулируйте его рамку так, чтобы он находился за кадром. Затем, когда вы хотите анимировать его на экране, используйте простой анимационный блок:

[UIView beginAnimations:nil context:nil];
drawerView.center = CGPointMake(...); // set coordinate to the end position
[UIView commitAnimations];

Попробуйте прочитать все это в документации. Затем задайте более конкретные вопросы, если у вас все еще есть проблемы.

1 голос
/ 17 февраля 2010

Я принял ваши предложения и посетил справочный центр разработчиков. Изменение состояния кнопки паузы воспроизведения было легким.

Однако добавление моих подпредставлений панели в мой UIVIEWController и анимация оказываются очень трудными для меня (target -c новичок).

Прежде всего, когда я пытаюсь сделать панельные виды, я получаю предупреждения о том, что панель UIView may not respond to initWithFrame. (initwithframe is a function of UIView ?)

Во-вторых, я не могу добавить изображение на свою панель UIView. Я получаю предупреждение, сказав

warning: passing argument 1 of 'addSubview:' from distinct Objective-C type

.

Наконец, при попытке применить анимацию к моей панели я получаю сообщение об ошибке:

UIView 'может не отвечать на' -commitAnimations 'и любой другой связанный с анимацией метод, который я пытаюсь добавить.

Вы можете помочь? Я думаю, что в основном я не понимаю, почему я получаю эти предупреждения «может не отвечать на метод», поскольку я вызываю метод с правильным типом (или я так думаю)

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    // SET UP THE PLAY PAUSE BUTTON
    playPause = [UIButton buttonWithType:UIButtonTypeCustom];
    playPause.frame = CGRectMake(-20,280, 100,100);
    [playPause setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
    [playPause addTarget:self action:@selector(buttonPushed:) 
        forControlEvents:UIControlEventTouchUpInside];
    playing=NO;

    //SET UP THE AUDIO PLAYER
    NSLog(@"Set up theAudio");
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/DumpTheChump.mp3", [[NSBundle mainBundle] resourcePath]]];  
    NSError *error;
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    audioPlayer.numberOfLoops = -1;

    //SETUP THE BOTTOM part of the PANEL
    UIImage *panelBottomImage=[UIImage imageNamed:@"panel_bottom.png"];
    panelBottom=[UIView initWithFrame:(CGRectMake(-20, 280, 285, 128))];
    [panelBottom addSubview:panelBottomImage];

    //SETUP THE TOP PART OF THE PANEL. (THE ONE THAT SHOULD SLIDE UP AND DOWN)

    UIImage *panelTopImage=[UIImage imageNamed:@"panel_top.png"];
    panelTop=[UIView initWithFrame:(CGRectMake(-20, 280, 285, 128))];
    [panelTop addSubview:panelTopImage];


    [self.view addSubview:panelBottom];
    [self.view addSubview:panelTop];
    [self.view addSubview:playPause];

//  285*128

}

- (void) buttonPushed:(id)sender
{
    NSLog(@"It works!");

    switch (playing) {
        case NO:
            playing=YES;
            [audioPlayer play];
            [playPause setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal];
            [panelTop beginAnimations:nil context:nil];
            [panelTop setAnimationDuration:2];
            [panelTop setAnimationDelegate:self];
            //UIView setAnimationDidStopSelector:@selector(onAnimationC omplete:finished:context;

            // set the position where button will move to
            panelTop.frame = CGRectMake(-20, 100, 285, 128);    

            [panelTop commitAnimations];
            break;
        case YES:
            playing=NO;
            [audioPlayer pause];
              [playPause setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
            [playPause setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal];
            [panelTop beginAnimations:nil context:nil];
            [panelTop setAnimationDuration:2];
            [panelTop setAnimationDelegate:self];
            //UIView setAnimationDidStopSelector:@selector(onAnimationC omplete:finished:context;

            // set the position where button will move to
            panelTop.frame = CGRectMake(-20, 280, 285, 128);    

            [panelTop commitAnimations];

            break;
        default:
            break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...