zoukankan      html  css  js  c++  java
  • IOS写一个能够支持全屏的WebView

    这样来写布局

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

  • 相关阅读:
    二:数组去重
    一:JS 数组对象根据相同key合并成新的数组对象(将一维数组转为多维数组)
    滑动scroll没有效果
    品字布局占满全屏
    js计算器
    html样式初始化
    js计算器
    js邮箱验证
    js菱形
    js实现金字塔图形
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7065248.html
Copyright © 2011-2022 走看看