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
原创粉丝点击