С удивлением я могу сказать, что это может быть достигнуто, и я просто это сделал.
Этот метод поддерживает все возможности:
Пока у вас есть экземпляр AVPlayer
, работающий под управлением iOS, предотвращает автоматическую блокировку устройство.
Сначала вам нужно настроить приложение для поддержки звукового фона из файла Info.plist, добавляя в массив UIBackgroundModes
элемент audio
.
Затем введите ваш appDelegate.m в - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:
эти методы
[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
и #import <AVFoundation/AVFoundation.h>
Затем в вашем представлении контроллер, который управляет AVPlayer
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
и
- (void)viewWillDisappear:(BOOL)animated
{
[mPlayer pause];
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
}
, затем ответьте на
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
switch (event.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
if([mPlayer rate] == 0){
[mPlayer play];
} else {
[mPlayer pause];
}
break;
case UIEventSubtypeRemoteControlPlay:
[mPlayer play];
break;
case UIEventSubtypeRemoteControlPause:
[mPlayer pause];
break;
default:
break;
}
}
. Другой прием необходим для возобновления воспроизведения, если пользователь нажимает кнопку «домой» (в в этом случае воспроизведение приостанавливается с исчезновением).
Когда вы управляете воспроизведением видео (у меня есть методы play:
и pause:
), установите
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
и
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil];
[g 16] и соответствующий метод, который будет запускать таймер и возобновить воспроизведение. - (void)applicationDidEnterBackground:(NSNotification *)notification
{
[mPlayer performSelector:@selector(play) withObject:nil afterDelay:0.01];
}
Проблема связана с тем, что тип возвращаемого значения helper
является list of substitution
, и некоторые из ваших совпадений не возвращают этот тип, а вместо этого тип блока. Поэтому компилятор указывает на эту ошибку.
Теперь, один из способов исправить это - вызвать исключение в этой точке.
exception NotUnifiable;;
И заменить все строки, аналогичные:
| TypInt, Arrow (a,b) -> print_string "Not Unifyable"
На:
| TypInt, Arrow (a,b) -> raise NotUnifiable
И использование унификации:
try
unify ...the arguments...
with NotUnifiable -> print "Not unifiable"
Но делать это может быть не тем, чего вы действительно хотите: как только возникает исключение, вы прекращаете все.