2
votes

I am trying to play youtube embedded video in webView it plays when i don't set delegate and If i set delegate video dosen't load and delegates methods are also not getting called. Here is MY Code:

.m class

#import "EmbeddedVideoVC.h"

@interface EmbeddedVideoVC (){
    MBProgressHUD *hud;
}
//@property (weak, nonatomic) IBOutlet UIWebView *webView;
@property (weak, nonatomic) IBOutlet UIView *viewSelf;

@property (strong, nonatomic) NSTimer *controllersTimer;
@property (assign, nonatomic) NSInteger controllersTimeoutPeriod;

@end

@implementation EmbeddedVideoVC

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.transform = CGAffineTransformMakeRotation(M_PI/2);       
}

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    CGRect bounds = [[UIScreen mainScreen] bounds];
    if ([SharedAppManager sharedInstance].applicationFrame.size.height < 568) {
        bounds = CGRectMake(0, 0, 480, 320);
    }
    _videoWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0,bounds.size.height, bounds.size.width)];
    [_videoWebView setAllowsInlineMediaPlayback:YES];
    [_videoWebView setMediaPlaybackRequiresUserAction:NO];

    [self.viewSelf addSubview:_videoWebView];

    hud = [MBProgressHUD showHUDAddedTo:_videoWebView animated:YES];
    hud.color = [UIColor clearColor];
    hud.activityIndicatorColor = [UIColor whiteColor];

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapMethod)];
    [tap setNumberOfTapsRequired:1]; // Set your own number here
    [tap setDelegate:self]; // Add the <UIGestureRecognizerDelegate> protocol
    [_videoWebView addGestureRecognizer:tap];
    _videoWebView.delegate= self;
    [_videoWebView loadHTMLString:self.embeddedCode baseURL:nil];
    [self hideControllers];

}
 -(void)didTapMethod{
     //Showing Controls
}
#pragma mark - WEBVIEW DELEGATES

- (void)webViewDidStartLoad:(UIWebView *)webView{
    [MBProgressHUD hideHUDForView:self.videoWebView animated:YES];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
   [MBProgressHUD hideHUDForView:self.videoWebView animated:YES];
}
-(void)webViewDidFinishLoad:(UIWebView *)webView {
   [MBProgressHUD hideHUDForView:self.videoWebView animated:YES];
}
- (BOOL)prefersStatusBarHidden {

    return YES;
}


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    {
        return YES;
    }

-(void)hideControllers { 
    [UIView animateWithDuration:0.5f animations:^{
    dispatch_async(dispatch_get_main_queue(), ^{ 
       topView.hidden= YES; 
    }); 
    } completion:^(BOOL finished){ 
    }]; 
}


-(void) showControles {

}

@end

.h class

#import "MusicParentVC.h"

@interface EmbeddedVideoVC : MusicParentVC <UIGestureRecognizerDelegate, UIWebViewDelegate>

@property (strong, nonatomic)  NSString *embeddedCode;
@property (nonatomic, strong) UIWebView *videoWebView;
@end

CAN ANYONE tell me what is the problem and why webViewDidFinishLoad: and others delegates methods not getting called and even embedded code not loading in webview?

2
where is "hideControllers" method? can you paste that code too.Satish A
- (void)hideControllers { [UIView animateWithDuration:0.5f animations:^{ dispatch_async(dispatch_get_main_queue(), ^{ topView.hidden= YES; }); } completion:^(BOOL finished){ }]; }Intsab Haider

2 Answers

0
votes

Just put your UIWebView related code in viewDidAppear: method.

Reference : https://stackoverflow.com/a/27647327/2284065

0
votes

1) Please make sure you are adding web view on present class view or on any top view.

2) Are you adding viewSelf in storyboard? since i cannot see it programmatically. Make sure of it, because you are adding web view to viewSelf.

3) In hideControllers you are hiding some topView. Make sure it is not the present class topView.

Here is the code working for me (delegate methods are also calling),

_videoWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0,self.view.frame.size.width, self.view.frame.size.height)];
[_videoWebView setAllowsInlineMediaPlayback:YES];
[_videoWebView setMediaPlaybackRequiresUserAction:NO];


UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapMethod)];
[tap setNumberOfTapsRequired:1]; // Set your own number here
[tap setDelegate:self]; // Add the <UIGestureRecognizerDelegate> protocol
[_videoWebView addGestureRecognizer:tap];
_videoWebView.delegate= self;


NSURL *nsurl=[NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[_videoWebView loadRequest:nsrequest];
[self.view addSubview:_videoWebView];

Hope this helps.