Я пытаюсь распознать мой код, когда нажимаю кнопку воспроизведения / паузы или касание трекпада пульта Apple TV во время воспроизведения рекламы, но я вижу странное поведение.
По какой-то причине мне нужно перетащить вниз с верхней части трекпада вниз, чтобы перенести информационную панель на мой Apple TV, и ТОЛЬКО тогда я смогу заставить кнопку воспроизведения / паузы фактически воспроизводить / приостанавливать объявление, которое сейчас воспроизводится. Похоже, что это какая-то проблема с первым респондентом.
Даже в приведенном выше случае метод, который я настроил для запуска при распознавании касания, фактически никогда не выполняется. Кажется, что операционная система обрабатывает события паузы / воспроизведения самостоятельно (чего я не хочу)
#import "BMIMAAdsViewController.h"
#import "UIImage+BMAdditions.h"
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdocumentation"
#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
#pragma clang diagnostic pop
/** The ad play image view size **/
static CGFloat kAdPlayImageViewSize = 100.0;
/** The ad play image view image name **/
static NSString *const kAdPlayImageViewImageName = @"BMVidiPlayerResources.bundle/BMResources/Images/ad_play";
static NSTimeInterval kAdPlayImageViewAnimationDuration = 0.2;
/** The ad play image view animation delay **/
static NSTimeInterval kAdPlayImageViewAnimationDelay = 0.0;
/** The ad play image view animation damping **/
static CGFloat kAdPlayImageViewAnimationDamping = 1.0;
/** The ad play image view animation velocity **/
static CGFloat kAdPlayImageViewAnimationVelocity = 1.0;
@interface BMIMAAdsViewController() <UIGestureRecognizerDelegate>
@property (nonatomic, strong) UIImageView *adPlayImageView;
@property (nonatomic, weak) UITapGestureRecognizer *tapRecognizer;
@end
@implementation BMIMAAdsViewController
#if TARGET_OS_IOS
- (BOOL)prefersStatusBarHidden
{
// we always want to hide the status bar for IMA Ads as the IMA UI collides with the
// status bar.
return YES;
}
#endif
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"********* VIEWDIDLOAD -> ABOUT TO ADD A TAP RECOGNIZER");
[self addTapRecognizer];
[self addPlayImageView];
}
#pragma mark - -- Gestures --
- (void)addTapRecognizer
{
#if TARGET_OS_IOS
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pauseAdFromTap:)];
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 1;
tapRecognizer.delegate = self;
[self.view addGestureRecognizer:tapRecognizer];
#else
NSLog(@"********* ADDING TAP RECOGNIZER");
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pauseAdFromTapOnAppleTV:)];
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.allowedPressTypes = @[[NSNumber numberWithInteger:UIPressTypeSelect], [NSNumber numberWithInteger:UIPressTypePlayPause]];
[self.view.window addGestureRecognizer:tapRecognizer];
#endif
self.tapRecognizer = tapRecognizer;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if (self.tapRecognizer != gestureRecognizer)
{
return YES;
}
// ignore touch from the "Learn More" title (height is approximate)
const CGFloat learnMoreTitleHeight = 35;
return [touch locationInView:self.view].y < learnMoreTitleHeight ? NO : YES;
}
- (void)showAdPlayImageViewAnimated
{
[self.view bringSubviewToFront:self.adPlayImageView];
self.adPlayImageView.hidden = NO;
[UIView animateWithDuration:kAdPlayImageViewAnimationDuration
delay:kAdPlayImageViewAnimationDelay
usingSpringWithDamping:kAdPlayImageViewAnimationDamping
initialSpringVelocity:kAdPlayImageViewAnimationVelocity
options:UIViewAnimationOptionCurveEaseIn animations:^{
// animations
self.adPlayImageView.alpha = 1.0;
} completion:^(BOOL finished) {
// empty completion
}];
}
- (void)hideAdPlayImageView:(BOOL)animated
{
if (!animated)
{
self.adPlayImageView.alpha = 0.0;
self.adPlayImageView.hidden = YES;
return;
}
[UIView animateWithDuration:kAdPlayImageViewAnimationDuration
delay:kAdPlayImageViewAnimationDelay
usingSpringWithDamping:kAdPlayImageViewAnimationDamping
initialSpringVelocity:kAdPlayImageViewAnimationVelocity
options:UIViewAnimationOptionCurveEaseIn animations:^{
// animations
self.adPlayImageView.alpha = 0.0;
} completion:^(BOOL finished) {
self.adPlayImageView.hidden = YES;
}];
}
- (void)addPlayImageView
{
self.adPlayImageView = [[UIImageView alloc] init];
self.adPlayImageView.backgroundColor = [UIColor clearColor];
self.adPlayImageView.alpha = 0.0;
self.adPlayImageView.hidden = YES;
self.adPlayImageView.userInteractionEnabled = YES;
self.adPlayImageView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:self.adPlayImageView];
// set constraints on the view
UILayoutGuide *margin = self.view.layoutMarginsGuide;
[self.adPlayImageView.widthAnchor constraintEqualToConstant:kAdPlayImageViewSize].active = YES;
[self.adPlayImageView.heightAnchor constraintEqualToConstant:kAdPlayImageViewSize].active = YES;
[self.adPlayImageView.centerXAnchor constraintEqualToAnchor:margin.centerXAnchor].active = YES;
[self.adPlayImageView.centerYAnchor constraintEqualToAnchor:margin.centerYAnchor].active = YES;
// set image now
UIImage *img = [UIImage bm_imageWithBundlePath:kAdPlayImageViewImageName];
self.adPlayImageView.image = img;
// add tap gesture
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(adResumeFromTap:)];
[singleTap setNumberOfTapsRequired:1];
[self.adPlayImageView addGestureRecognizer:singleTap];
}
- (void)pauseAdFromTap:(UITapGestureRecognizer *)recognizer
{
[self showHidePlayButton:YES];
[self.adsManager pause];
}
- (void)pauseAdFromTapOnAppleTV:(UITapGestureRecognizer *)recognizer
{
NSLog(@"********* IN PAUSE AD FROM TAP");
[self showHidePlayButton:YES];
[self.adsManager pause];
}
- (void)adResumeFromTap:(UIGestureRecognizer *)recognizer
{
NSLog(@"********* IN RESUME AD FROM TAP");
[self showHidePlayButton:NO];
[self.adsManager resume];
}
- (void)showHidePlayButton:(BOOL)show
{
NSLog(@"********* IN SHOWHIDEPLAYBUTTON...");
if (show)
{
NSLog(@"********* ABOUT TO SHOW AD PLAY IMAGEVIEW...");
[self showAdPlayImageViewAnimated];
}
else
{
NSLog(@"********* ABOUT TO HIDE AD PLAY IMAGEVIEW...");
[self hideAdPlayImageView:YES];
}
}
@end
Итак, у меня есть 2 проблемы, которые мне нужно исправить: 1) Что мне делать нужно изменить, чтобы получить нажатие на трекпад или нажать кнопку воспроизведения / паузы, чтобы правильно вызвать соответствующий метод селектора (pauseAdFromTapOnAppleTV)? 2) Существует метод с именем showAdPlayImageViewAnimated, который показывает изображение «показ рекламы», когда пользователь пытается приостановить показ рекламы. Я пытаюсь вызвать этот метод из pauseAdFromTapOnAppleTV, но pauseAdFromTapOnAppleTV фактически никогда не выполняется
Я пытался найти что-то с помощью addTapRecognizer, но что-то не так.
Пожалуйста, посоветуйте?