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?
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),
Hope this helps.
Just put your
UIWebView
related code inviewDidAppear:
method.Reference : https://stackoverflow.com/a/27647327/2284065