iPhone: приложение становится «черным», когда сообщение «UIStatusBarStyleBlackTranslucent недоступно на этом устройстве». отображается - PullRequest
0 голосов
/ 13 февраля 2012

В моем приложении я записываю видео и играю его.В большинстве случаев видео воспроизводится хорошо, но иногда в середине воспроизводимого видео, когда я нажимаю кнопку «Готово» в моем журнале «UIStatusBarStyleBlackTranslucent недоступен на этом устройстве.» msg отображается, но как его генерироватьЯ не знаю, и когда этот файл генерируется, мое приложение становится «черным», и мне приходится удалять его из фона.В остальное время мое видео работает красиво и отлично.В моем файле info.plist я изменил необходимые параметры строки состояния, но не оказал влияния на мой результат.

Хочу отметить, что я отлаживаю свое приложение с iPad.

, и это сообщение не генерируеткаждый раз.Я не знаю, почему это сообщение отображается.После запуска кода на нажатой кнопке «Готово».

- (void)moviePlaybackDidFinish:(NSNotification*)notification
{
    [self stopMovie];
    NSLog(@"Start Timer Again");
   // [btnVideo setTitle:@"Start Recording" forState:UIControlStateNormal];
    [btnVideo setImage:[UIImage imageNamed:@"Record Button-iPad.png"] forState:UIControlStateNormal];
    NSURL *url = [NSURL fileURLWithPath:@"/dev/null"];

    NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
                              [NSNumber numberWithFloat: 44100.0],                 AVSampleRateKey,
                              [NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
                              [NSNumber numberWithInt: 1],                         AVNumberOfChannelsKey,
                              [NSNumber numberWithInt: AVAudioQualityMax],         AVEncoderAudioQualityKey,
                              nil];

    NSError *error;

    if (recorder) {
        recorder = nil;
        [recorder release];
    }
    recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];

    if (recorder) {
        [recorder prepareToRecord];
        recorder.meteringEnabled = YES;
        [recorder record];
    }
    NSString *str = [[NSUserDefaults standardUserDefaults] valueForKey:@"IMAGE_MOVEMENT"];
    NSLog(@"image movement %@",str);
    if(str == @"EASY")
    {
        NSLog(@"inside easy image");
        [self validateTimer];
        levelTimer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(levelTimerCallbackEasy:) userInfo:nil repeats: YES];
    }
    else if(str == @"MEDIUM")
    {
        NSLog(@"inside medium image");
        [self validateTimer];
        levelTimerMedium = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(levelTimerCallbackMedium:) userInfo:nil repeats:YES];
    }
    else if(str == @"HARD")
    {
        NSLog(@"inside hard image");
        [self validateTimer];
        levelTimerHard = [NSTimer scheduledTimerWithTimeInterval:0.03 target: self selector: @selector(levelTimerCallbackHard:) userInfo: nil repeats: YES];
    }
}

- (void)stopMovie
{
        NSLog(@"Stop Movie");


     [[NSNotificationCenter defaultCenter]
     removeObserver:self 
     name:MPMoviePlayerWillExitFullscreenNotification 
     object:moviePlayer];

     // This trick is necessary, otherwise the screen remains black or will
     // flicker when you try to play the next video.
     [moviePlayer pause];
     [moviePlayer stop];
     moviePlayer.initialPlaybackTime = -1.0;

     moviePlayer = nil;


    NSString *recorderFilePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    recorderFilePath = [recorderFilePath stringByAppendingPathComponent:@"tempRecording.caf"];

    if ([[NSFileManager defaultManager] fileExistsAtPath:recorderFilePath]) {
        [[NSFileManager defaultManager] removeItemAtPath:recorderFilePath error:nil];
    }

    NSString *movieFilePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    movieFilePath = [movieFilePath stringByAppendingPathComponent:@"export.mov"];

    if ([[NSFileManager defaultManager] fileExistsAtPath:movieFilePath]) {
        [[NSFileManager defaultManager] removeItemAtPath:movieFilePath error:nil];
    }

    NSString *videoFilePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    videoFilePath = [videoFilePath stringByAppendingPathComponent:@"output.mp4"];

    if ([[NSFileManager defaultManager] fileExistsAtPath:videoFilePath]) {
        [[NSFileManager defaultManager] removeItemAtPath:videoFilePath error:nil];
    }

    NSURL *urls = [NSURL fileURLWithPath:recorderFilePath];
    NSError *err = nil;

    if (voiceRecorder) {
        voiceRecorder = nil;
        [voiceRecorder release];
    }

    voiceRecorder = [[ AVAudioRecorder alloc] initWithURL:urls settings:recordSetting error:&err];
    //[recorder setMeteringEnabled:YES];

    if(!voiceRecorder){
        NSLog(@"recorder: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
        UIAlertView *alert =
        [[UIAlertView alloc] initWithTitle: @"Warning"
                                   message: [err localizedDescription]
                                  delegate: nil
                         cancelButtonTitle:@"OK"
                         otherButtonTitles:nil];
        [alert show];
        [alert release];
        return; 
    }

    //prepare to record
    [voiceRecorder setDelegate:self];
    [voiceRecorder prepareToRecord];
    //voiceRecorder.meteringEnabled = YES;
}

предоставьте мне любое решение, если у вас есть.

Заранее спасибо.

1 Ответ

0 голосов
/ 13 февраля 2012

iPad не поддерживает UIStatusBarStyleBlackTranslucent, измените его на обычный, и вы избавитесь от ошибки. Возможно, потому что они решили, что большому экрану все равно не нужны эти дополнительные 20 пикселей.

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