这样来写布局

一个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

IOS写一个能够支持全屏的WebView的更多相关文章

  1. 使用AVPlayer自定义支持全屏的播放器(五)—Swift重构版本

    前言 很早之前开源了一个简单的视频播放器,由于年久失修,效果惨目忍睹,最近特意花时间对其进行了深度重构.旧版本后期不再维护,新版本使用Swift实现,后续会增加更多功能.不想看文字的请自行下载代码-- ...

  2. iOS 实现单个页面支持横竖屏,其他页面只能竖屏

    最近在自己的项目里面 有需要做一个需求 : app中某一个页面支持横竖屏, 而其他页面只能竖屏. 1 2 实现方法如下: 1 首先需要Xcode中选中支持的屏幕方向  2 Appdelegate中 . ...

  3. 如何制作一个完美的全屏视频H5

    写在前面的话: 最近一波H5广告火爆整个互联网圈,身为圈内人,我们怎能     不! 知!道! :( 嘘!真不知道的也继续看下去,有收获 ↓ ) So,搞懂这个并不难. 这篇文章将带你从头到尾了解H5 ...

  4. iOS端一次视频全屏需求的实现(转)

    对于一个带有视频播放功能的app产品来说,视频全屏是一个基本且重要的需求.虽然这个需求看起来很简单,但是在实现上,我们前后迭代了三套技术方案.这篇文章将介绍这三种实现方案中的利弊和坑点,以及实现过程中 ...

  5. ios单独的页面支持横竖屏的状态调整,HTML5加载下(更新2)

    单独的页面支持横竖屏的状态调整,HTML5加载下 工程中设置只支持竖屏状态,在加载HTML5的界面可以是横竖屏的,在不对工程其他界面/设置做调整的同时,可以这样去 #import "View ...

  6. 手动写一个类支持foreach循环

    之前初学时看过可以实现Iterable接口实现Iterator迭代器的支持,并且也支持foreach循环.现在学习了数据结构,手动写一个单链表支持foreach循环吧. 手写foreach循环步骤: ...

  7. iOS开发——点击图片全屏显示

    点击图片,全屏显示,然后再点击屏幕一下,返回. 没啥难的,直接上代码: // //  ViewController.m //  Demo-hehe // //  Created by yyt on 1 ...

  8. iOS 全屏侧滑/UIScrollView/UISlider间滑动冲突

    代码地址如下:http://www.demodashi.com/demo/13848.html 效果预览 一.前期准备 有一个支持全屏侧滑返回的视图控制器ViewController,ViewCont ...

  9. iOS 视频全屏功能 学习

    项目中,也写过类似"视频全屏"的功能, 前一阵子读到今日头条 的一篇技术文章,详细介绍三种旋转方法差异优劣最终择取.文章从技术角度看写的非常好,从用户角度看,也用过多家有视频功能的 ...

随机推荐

  1. [.Net] DataTable添加列和行的三种方法

    #region 方法一: DataTable tblDatas =new DataTable("Datas"); DataColumn dc =null; dc = tblData ...

  2. 前端(小程序)项目Aes.js/Md5.js加密的处理方法

    做项目中需要对前端数据加密传输这个时候需要用到前端加密的算法主要是:Aes.js,Md5.js 一.Vue项目用到的aes.js加密. 1.直接在index.html引入aes.js或者在npm in ...

  3. java中的数组的Arrays工具类的使用

    package day04.d1.shuzu; import java.util.Arrays; /** * Arrays 工具类 * @author Administrator * */public ...

  4. C# net winform wpf 发送post数据和xml到网页

    由于项目需要发送数据到网页 这里用aspx做测试 采用post以及get发送数据,页面进行数据  首先这个东西很简单很简单,基本上学过的都会,但是原谅一直搞cs几乎不搞bs的猿类吧.三四年没接触bs. ...

  5. (转载)Android 方法数超过64k、编译OOM、编译过慢解决方案。

    Android 方法数超过64k.编译OOM.编译过慢解决方案.   目前将项目中的leancloud的即时通讯改为环信的即时通讯.当引入easeui的时候 出现方法数超过上限的问题. 搜索一下问题, ...

  6. gulp创建完整的项目流程

    所有的环境都是在 node 安装好的基础上执行的. node -v 查看node的安装情况.npm -v查看npm 的安装情况. gulp自动化构建常用参数 1.src 读取文件或者文件夹 2.des ...

  7. css3小叮当(转载)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 路飞学城Python-Day186

    Evernote Export 持续集成 持续集成,简单的说就是持续集成频繁的将代码集成到主干,它的好处主要有1.快速发现错误,没完成一点更新,就集成到主干,可以快速发现错误,定位错误也会比较容易,2 ...

  9. Angular之constructor和ngOnInit差异及适用场景(转)

    原始地址:https://blog.csdn.net/u010730126/article/details/64486997 Angular中根据适用场景定义了很多生命周期函数,其本质上是事件的响应函 ...

  10. python数据分析------文本挖掘(jieba)

    1.import jieba jieba的cut函数有三个模式:全模式.精准模式.搜索引擎模式 1 精确模式,试图将句子最精确地切开,适合文本分析: 2 全模式,把句子中所有的可以成词的词语都扫描出来 ...