IOS写一个可以支持全屏的WebView
来源:互联网 发布:sql美化工具 编辑:程序博客网 时间:2024/06/07 01:50
这样来写布局
一个TitleView作为顶部搜索栏:
@implementation TitleView- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { // Initialization code [self initTilte]; } return self;}-(void)initTilte{ UITextField* field = [[UITextField alloc] initWithFrame:CGRectMake(20, 10, 230, 30)]; _textField = field; _textField.autoresizingMask = UIViewAutoresizingFlexibleWidth;//自动调整自己的位置,使自己的左边距和右边距和superview保持不变 _textField.enablesReturnKeyAutomatically = YES; //使return在输入时可以使用 _textField.placeholder = @"please input:"; //设置hint的值 _textField.textAlignment = NSTextAlignmentLeft; //文字靠左显示 _textField.borderStyle = UITextBorderStyleNone; //没有边框 _textField.font = [UIFont systemFontOfSize:18.0f]; //设置字体大小 _textField.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; _textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; //这两个使文字会居中显示 _textField.clearButtonMode = UITextFieldViewModeWhileEditing; //当输入时有clear button UIImage* image = [[UIImage imageNamed:@"text_field_bg.png"] stretchableImageWithLeftCapWidth:20 topCapHeight:0]; //stretchableImageWithLeftCapWidth使图片有拉伸效果 _textField.delegate = self; //给textField设置代理 _textField.background = image; //背景设置 _textField.leftViewMode = UITextFieldViewModeAlways; [_textField setText:@"http://m.baidu.com"]; CGRect frame = [_textField frame]; frame.size.width = 15; UIView* view1 = [[UIView alloc] initWithFrame:frame]; _textField.leftView = view1; //上面几句话设置文字跟textField的左边有些距离 [self addSubview:_textField]; UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom]; //init一个button,可以自定义背景 [button setBackgroundImage:[[UIImage imageNamed:@"cancel_but_bg.png"] stretchableImageWithLeftCapWidth:20 topCapHeight:0] forState:UIControlStateNormal]; button.frame = CGRectMake(260,10, 49, 30); //设置button的背景,有normal和highlight两种状态 [button setBackgroundImage:[[UIImage imageNamed:@"cancel_but_bg2.png"] stretchableImageWithLeftCapWidth:20 topCapHeight:0] forState:UIControlStateHighlighted]; [button setTitleColor:[CCommon RGBColorFromHexString:@"#333333" alpha:1.0f] forState:UIControlStateNormal]; [button setTitleColor:[CCommon RGBColorFromHexString:@"#000000" alpha:1.0f] forState:UIControlStateHighlighted]; [button addTarget:self action:@selector(onclick) forControlEvents:UIControlEventTouchUpInside]; [button setTitle:@"搜索" forState:UIControlStateNormal]; <strong> button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;//这个让button字体周边有自适应的margin</strong> [self addSubview:button]; [button addTarget:self action:@selector(onclick) forControlEvents:UIControlEventTouchUpInside]; UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 44, 320,2)]; view.backgroundColor = [UIColor grayColor]; [self addSubview:view]; }-(void)resignTextField{ [_textField resignFirstResponder];}-(void)onclick{ [_customUiWebViewController onclick];//让controller执行搜索页面的操作}
viewcontroller的viewdidload:
- (void)viewDidLoad{ [super viewDidLoad]; _titleView = [[TitleView alloc] initWithFrame:[[CustomUiWebViewUIManager sharedInstance] getSearchBarView]]; _titleView.customUiWebViewController = self; [self.view addSubview:_titleView]; // Do any additional setup after loading the view. CustomWidgetUiWebView* tView = [[CustomWidgetUiWebView alloc] initWithFrame: [[CustomUiWebViewUIManager sharedInstance] getWebViewFrameBySearchResultView]]; self.customWidgetUiWebView = tView; [self.customWidgetUiWebView setOpaque:NO]; [self.customWidgetUiWebView setBackgroundColor:[UIColor whiteColor]]; [self.customWidgetUiWebView setDelegate:self]; self.customWidgetUiWebView.scalesPageToFit = YES; self.customWidgetUiWebView.detectsPhoneNumbers = NO; // NSURL* url = [NSURL URLWithString:@"http://m.baidu.com"];// NSURLRequest* request = [NSURLRequest requestWithURL:url];// [self.customWidgetUiWebView loadRequest:request]; <strong> NSArray* arr = [self.customWidgetUiWebView subviews]; UIScrollView* sView = [arr objectAtIndex:0]; [sView setOpaque:NO]; [sView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"webview_bg.png"]]]; //这个把webview的sub view的scrollview的透明度设为不透明,并加上背景 sView.delegate = self;</strong> WebToolBarController* tmpWebToolBarController = [[WebToolBarController alloc] init];//这个是底下的toolbar self.webToolBarController = tmpWebToolBarController; [_webToolBarController loadWebViewToolBar]; [self.view addSubview:_customWidgetUiWebView]; _webToolBarController.webToolBar.frame = [[WebToolBarUIManager sharedInstance] webToolBarFrame]; [self.view addSubview:_webToolBarController.webToolBar]; self.webToolBarController.delegate = self; <strong> [self startUpdateButtonStatusTimer]; //这个是起了一个timer来更新back和forward的状态</strong> CGRect iconRc = [[CustomUiWebViewUIManager sharedInstance] getFullScreenBtnFrame]; UIButton* curBtn = [[UIButton alloc] initWithFrame:iconRc]; [curBtn setImage:[UIImage imageNamed:@"fullScreen.png"] forState:UIControlStateNormal]; [curBtn setImage:[UIImage imageNamed:@"fullScreen_touch.png"] forState:UIControlStateHighlighted]; [curBtn addTarget:self action:@selector(fullScreenBtnClick:) forControlEvents:UIControlEventTouchUpInside]; curBtn.alpha = 0; self.fullScreenBtn = curBtn; [self.view addSubview:curBtn]; }
-(void)startUpdateButtonStatusTimer{ [self freeUpdateButtonStatusTimer]; NSDate* tmpDate = [[NSDate alloc] initWithTimeIntervalSinceNow:0.5]; NSTimer* tmpTimer = [[NSTimer alloc] initWithFireDate:tmpDate interval:10.0 target:self selector:@selector(UpdateButtonStatusTimerFired:) userInfo:nil repeats:YES]; <strong>//0.5s以后执行<span style="font-family: Arial, Helvetica, sans-serif;">UpdateButtonStatusTimerFired,并且10.0s再重复执行</span></strong> self.updateStatusBarTimer = tmpTimer; [[NSRunLoop currentRunLoop] addTimer:_updateStatusBarTimer forMode:NSDefaultRunLoopMode];}- (void)UpdateButtonStatusTimerFired:(id)sender{[self updateToobarButtonStatusByWebView];//[self freeUpdateButtonStatusTimer];}- (void)updateToobarButtonStatusByWebView{ if (![_customWidgetUiWebView isLoading]) { return; } [_webToolBarController setItem:ITEM_BACK enabled:[_customWidgetUiWebView canGoBack]]; [_webToolBarController setItem:ITEM_FORWARD enabled:[_customWidgetUiWebView canGoForward]]; }
如果执行全屏和离开全屏的操作:
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ CGFloat screenHeight = [UIScreen mainScreen].applicationFrame.size.height; NSArray* arr = [self.customWidgetUiWebView subviews]; UIScrollView* sView = [arr objectAtIndex:0]; if (sView.contentSize.height < screenHeight) { //如果webview的内容区域小于屏幕高度,则不执行全屏操作 return; } if (self.customWidgetUiWebView.widgetEmbedStatus == ENoWidgetEmbed){ NSLog(@"====y=%f",sView.contentOffset.y); if (sView.contentOffset.y >= SearchBar_Height && sView.contentOffset.y < sView.contentSize.height-screenHeight) {//contentOffset<span class="s1" style="font-family: Arial, Helvetica, sans-serif;">是当前显示的区域的</span><span style="font-family: Arial, Helvetica, sans-serif;">origin</span><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">相对于整个</span><span style="font-family: Arial, Helvetica, sans-serif;">scrollView</span><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">的</span><span style="font-family: Arial, Helvetica, sans-serif;">origin</span><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">的位置,如果大于SearchBar_Height,并且小于底部</span> if (isFullScreenMode) { return; }else{ [self goToFullScreenMode]; } }else if(isFullScreenMode) { [self exitFullScreenMode]; } }}-(void)goToFullScreenMode{ [UIView beginAnimations:@"FullScreenMode" context:NULL]; [UIView setAnimationDuration:0.5f]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; _webToolBarController.webToolBar.frame = [[WebToolBarUIManager sharedInstance] webToolBarHideFrame]; [UIView commitAnimations]; _titleView.frame =[[CustomUiWebViewUIManager sharedInstance] getSearchBarViewFullView]; _customWidgetUiWebView.frame = [[CustomUiWebViewUIManager sharedInstance] getWebViewFrameByFullScreenView]; //shwo button [UIView beginAnimations:@"animationID" context:NULL]; [UIView setAnimationDuration:0.5f]; _fullScreenBtn.alpha = 1; [UIView commitAnimations]; isFullScreenMode = YES; [_titleView resignTextField]; }-(void)exitFullScreenMode{ [UIView beginAnimations:@"NotScreenMode" context:NULL]; [UIView setAnimationDuration:0.2f]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [SearchBarViewController sharedInstance].view.frame = [[SearchBarUIManager sharedInstance] searchBarViewFrame]; _webToolBarController.webToolBar.frame = [[WebToolBarUIManager sharedInstance] webToolBarFrame]; if (!isBtnClickAni) { _customWidgetUiWebView.frame = [[CustomUiWebViewUIManager sharedInstance] getWebViewFrameBySearchResultView]; _titleView.frame = [[CustomUiWebViewUIManager sharedInstance] getSearchBarView]; } [UIView commitAnimations]; [UIView beginAnimations:@"animationID" context:NULL]; [UIView setAnimationDuration:0.5f]; _fullScreenBtn.alpha = 0; [UIView commitAnimations]; isFullScreenMode = NO; }- (void)fullScreenBtnClick:(id)sender { // isBtnClickAni = YES; [self exitFullScreenMode]; // isBtnClickAni = NO;}
gosafari的代码:
- (void)goSafari{UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"String_QueryOpBySafari", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"String_Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"String_OpBySafari", nil),nil];[actionSheet showInView:self.view];}- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex{if (buttonIndex==0){if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:[_customWidgetUiWebView stringByEvaluatingJavaScriptFromString:@"document.URL"]]]){[[CCommon sharedInstance ]appOpenUrl:[_customWidgetUiWebView stringByEvaluatingJavaScriptFromString:@"document.URL"]];}else{[[CCommon sharedInstance ]appOpenUrl:[[_customWidgetUiWebView.request URL]absoluteString]];} }}
效果图:
代码:http://download.csdn.net/detail/baidu_nod/7734661
0 0
- IOS写一个可以支持全屏的WebView
- 一个可以全屏滑动的View
- 一个支持chrome、firefox的全屏插件
- WebView 支持 Html5 video 进行全屏播放
- iOS 9 下写WebView的错误
- WebView 写一个自己的简单浏览器
- .net写的Email可以群发邮件小程序(应网友要求写一个支持群发)
- Android 使WebView支持HTML5 Video(全屏)播放的方法
- Android 使WebView支持HTML5 Video(全屏)播放的方法
- webView全屏播放的问题
- webview video全屏的解决方案
- 如何写一个覆盖状态栏的全屏的QML应用
- ios如果写一个提示带动画的View,可以来引导用户行为
- 创建一个可以写本地文件的触发器
- 如何写一个可以展开的TextView
- 假如写一个支持HTML5的浏览器
- iOS学习之WebView的使用 (主要是下面的全屏半透明实现)
- android webView 播放优酷、腾讯、爱奇艺,支持全屏
- stl的实现原理
- 数码管字符识别
- ORACLE里边case when then end的用法
- 新浪天气API返回数据对照表
- 设计模式--6大原则--开闭原则
- IOS写一个可以支持全屏的WebView
- Square Coins<母函数>
- Codeforces 455C —— Civilization(并查集,树上最长链)
- hdu-oj 1008 Elevator
- 单链表常见操作
- 栈
- 树-堆结构练习——合并果子之哈夫曼树
- LeetCode-Combinations
- lightoj 1022