zoukankan      html  css  js  c++  java
  • IOS客户端Coding项目记录(五)

    1:统一修改导航栏的样式,在 AppDelegate.m中

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.window.backgroundColor = [UIColor whiteColor];
        
        //设置导航条样式
        [self customizeInterface];
        
        if ([Login isLogin]) {
            [self setupTabViewController];
        }else{
            [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
            [self setupLoginViewController];
        }
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    - (void)customizeInterface {
        //设置Nav的背景色和title色
        UINavigationBar *navigationBarAppearance = [UINavigationBar appearance];
        NSDictionary *textAttributes = nil;
        if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
            [navigationBarAppearance setTintColor:[UIColor whiteColor]];//返回按钮的箭头颜色
            [[UITextField appearance] setTintColor:[UIColor colorWithHexString:@"0x3bbc79"]];//设置UITextField的光标颜色
            [[UITextView appearance] setTintColor:[UIColor colorWithHexString:@"0x3bbc79"]];//设置UITextView的光标颜色
            [[UISearchBar appearance] setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithHexString:@"0xe5e5e5"]] forBarPosition:0 barMetrics:UIBarMetricsDefault];
    
            textAttributes = @{
                               NSFontAttributeName: [UIFont boldSystemFontOfSize:kNavTitleFontSize],
                               NSForegroundColorAttributeName: [UIColor whiteColor],
                               };
        } else {
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0
            [[UISearchBar appearance] setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithHexString:@"0xe5e5e5"]]];
    
            textAttributes = @{
                               UITextAttributeFont: [UIFont boldSystemFontOfSize:kNavTitleFontSize],
                               UITextAttributeTextColor: [UIColor whiteColor],
                               UITextAttributeTextShadowColor: [UIColor clearColor],
                               UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetZero],
                               };
    #endif
        }
        [navigationBarAppearance setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithHexString:@"0x28303b"]] forBarMetrics:UIBarMetricsDefault];
        [navigationBarAppearance setTitleTextAttributes:textAttributes];
    }
    
    其中上面的版本判断:
    FOUNDATION_EXPORT double NSFoundationVersionNumber;
    
    #if TARGET_OS_IPHONE
    #define NSFoundationVersionNumber_iPhoneOS_2_0    678.24
    #define NSFoundationVersionNumber_iPhoneOS_2_1  678.26
    #define NSFoundationVersionNumber_iPhoneOS_2_2  678.29
    #define NSFoundationVersionNumber_iPhoneOS_3_0  678.47
    #define NSFoundationVersionNumber_iPhoneOS_3_1  678.51
    #define NSFoundationVersionNumber_iPhoneOS_3_2  678.60
    #define NSFoundationVersionNumber_iOS_4_0  751.32
    #define NSFoundationVersionNumber_iOS_4_1  751.37
    #define NSFoundationVersionNumber_iOS_4_2  751.49
    #define NSFoundationVersionNumber_iOS_4_3  751.49
    #define NSFoundationVersionNumber_iOS_5_0  881.00
    #define NSFoundationVersionNumber_iOS_5_1  890.10
    #define NSFoundationVersionNumber_iOS_6_0  992.00
    #define NSFoundationVersionNumber_iOS_6_1  993.00
    #define NSFoundationVersionNumber_iOS_7_0 1047.20
    #define NSFoundationVersionNumber_iOS_7_1 1047.25
    #endif

     2:判断一张view 是否被加载过用 nil == view.superview

            if (nil == view.superview) {     //判断一个view 是否被加载过    如果被加载过,它的superview就不会是nil
                CGRect frame = scrollView0.frame;
                frame.origin.x = frame.size.width * page;
                frame.origin.y = 0;
                view.frame = frame;
                [scrollView0 addSubview:view];
            }

     3:百度地图初始化坐标范围

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [UIApplication sharedApplication].applicationIconBadgeNumber =15;
        _mapView=[[BMKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 400)];
        BMKCoordinateRegion region; ////表示范围的结构体
        region.center.latitude  = 24.27;// 中心中
        region.center.longitude = 118.06;
        region.span.latitudeDelta = 0.1;//经度范围(设置为0.1表示显示范围为0.2的纬度范围)
        region.span.longitudeDelta = 0.1;//纬度范围
        [_mapView setRegion:region];
        [self.baiduView addSubview:_mapView];
    }
    
    自定义大头针的图片:
    
    - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation
    {
        if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
            BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];
            newAnnotationView.pinColor = BMKPinAnnotationColorPurple;
            newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
            newAnnotationView.image = [UIImage imageNamed:@"iphone"];   //把大头针换成别的图片
            return newAnnotationView;
        }
        return nil;
    }

     4:隐藏键盘

    当前视图上有多个uitextfield时,来隐藏键盘, 先遍历视图的所有子视图来 如果是UITextField就将其设为非第一响应 当然,如果要隐藏子视图上的UITextField的话可以进一步判断view的subviews的个数,如果大于1则遍历view的子视图,然后作类似操作
    
    //隐藏键盘  当前视图上有多个uitextfield
    
    for(UIView *view in [self.view subviews])
    {
         if(view is kindofclass:[UITextField Class])
        {
                 [view resignfirstrespond];
         }
    }
    直接用 [self.view endEditing:NO]
    直接取消当前Window上的各种view的键盘 [[[UIApplication sharedApplication] keyWindow] endEditing:YES];
    或者使用如下代码
    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
    
    {
    
    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(done:)];
    
    tapGestureRecognizer.numberOfTapsRequired = 1;
    
    [self.view addGestureRecognizer: tapGestureRecognizer];   //只需要点击非文字输入区域就会响应hideKeyBoard
    
    return YES;
    
    }

     5:UIView中的坐标转换

    // 将像素point由point所在视图转换到目标视图view中,返回在目标视图view中的像素值
    - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view;
    // 将像素point从view中转换到当前视图中,返回在当前视图中的像素值
    - (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view;
    
    // 将rect由rect所在视图转换到目标视图view中,返回在目标视图view中的rect
    - (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;
    // 将rect从view中转换到当前视图中,返回在当前视图中的rect
    - (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;
    
    例把UITableViewCell中的subview(btn)的frame转换到 controllerA中
    
    
    // controllerA 中有一个UITableView, UITableView里有多行UITableVieCell,cell上放有一个button
    // 在controllerA中实现:
    CGRect rc = [cell convertRect:cell.btn.frame toView:self.view];
    或
    CGRect rc = [self.view convertRect:cell.btn.frame fromView:cell];
    // 此rc为btn在controllerA中的rect
    
    或当已知btn时:
    
    CGRect rc = [btn.superview convertRect:btn.frame toView:self.view];
    或
    CGRect rc = [self.view convertRect:btn.frame fromView:btn.superview];
    
    比如:
    CGPoint origin = [self convertPoint:CGPointZero toView:[UIApplication sharedApplication].keyWindow];  
    把self的0点坐标系,放到keyWindow的坐标系换算一下,获得一个“绝对的”坐标
    一个在父控件中的坐标为0,0  其实父控件本来有坐标200,200  通过上面可以获得这个200,200值

     6:弹出一个视图,并有一个背影的视图(大体代码)

    - (UIView *)myTapBackgroundView{
        if (!_myTapBackgroundView) {
            _myTapBackgroundView = ({
                UIView *view = [[UIView alloc] initWithFrame:kScreen_Bounds];
                view.backgroundColor = [UIColor clearColor];
                UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(changeShowing)];
                [view addGestureRecognizer:tap];
                view;
            });
        }
        return _myTapBackgroundView;
    }
    
    - (UIView *)myContentView{
        if (!_myContentView) {
            _myContentView = ({
                UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
                view.backgroundColor = [UIColor whiteColor];
                view;
            });
        }
        return _myContentView;
    }
    
    - (void)changeShowing{
        [kKeyWindow endEditing:YES];
        if (!_myContentView) {//未载入过
            [self loadUIElement];
        }
        CGPoint origin = [self convertPoint:CGPointZero toView:kKeyWindow];
        CGFloat contentHeight = self.isShowing? 0: kCodeBranchTagButton_ContentHeight;
        if (self.isShowing) {//隐藏
            self.enabled = NO;
            [UIView animateWithDuration:0.3 animations:^{
                self.myTapBackgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0];
                self.myContentView.alpha = 0;
                self.myContentView.frame = CGRectMake(0, origin.y-contentHeight, kScreen_Width, contentHeight);
                self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, DEGREES_TO_RADIANS(180));
            } completion:^(BOOL finished) {
                [self.myTapBackgroundView removeFromSuperview];
                [self.myContentView removeFromSuperview];
                self.enabled = YES;
                self.isShowing = NO;
            }];
        }else{//显示
            self.myContentView.frame = CGRectMake(0, origin.y, kScreen_Width, 0);
            [kKeyWindow addSubview:self.myTapBackgroundView];
            [kKeyWindow addSubview:self.myContentView];
            self.enabled = NO;
            [UIView animateWithDuration:0.3 animations:^{
                self.myTapBackgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.2];
                self.myContentView.alpha = 1.0;
                self.myContentView.frame = CGRectMake(0, origin.y-contentHeight, kScreen_Width, contentHeight);
                self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, DEGREES_TO_RADIANS(180));
            } completion:^(BOOL finished) {
                self.enabled = YES;
                self.isShowing = YES;
            }];
        }
    }
    
    其中:#define kScreen_Bounds [UIScreen mainScreen].bounds
    #define kKeyWindow [UIApplication sharedApplication].keyWindow

    运用在项目中一个下拉菜单:

    /**

     *  @author wujunyang, 15-05-13 14:05:12

     *

     *  @brief  初始化背景视图

     *  @return <#return value description#>

     */

    - (UIView *)myTapBackgroundView{

        if (!_myTapBackgroundView) {

            _myTapBackgroundView = ({

                UIView *view = [[UIView alloc] initWithFrame:SCREENFRAME];

                view.backgroundColor = [UIColor clearColor];

                UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(changeShowing)];

                [view addGestureRecognizer:tap];

                view;

            });

        }

        return _myTapBackgroundView;

    }

    /**

     *  @author wujunyang, 15-05-13 14:05:25

     *

     *  @brief  初始化弹出视图

     *  @return <#return value description#>

     */

    - (UIView *)myContentView{

        if (!_myContentView) {

            _myContentView = ({

                UIView *view = [[UIView alloc] initWithFrame:CGRectZero];

                view.backgroundColor = [UIColor whiteColor];

                view;

            });

        }

        return _myContentView;

    }

    /**

     *  @author wujunyang, 15-05-13 14:05:39

     *

     *  @brief  加载xib文件到弹出视图里面

     */

    - (void)loadUIElement{

        self.myTapBackgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0];

        self.homeMyselfMenuView=[HomeMyselfMenuView instanceHomeMyselfMenuView];

        self.homeMyselfMenuView.frame = CGRectMake(0, 0, 0, 0);//注意其宽高

        [self.myContentView addSubview:self.homeMyselfMenuView];

    }

    /**

     *  @author wujunyang, 15-05-13 14:05:07

     *

     *  @brief  控制视图的显示及隐藏

     */

    - (void)changeShowing{

        if (!_myContentView) {

            [self loadUIElement];

        }

        CGFloat contentHeight = self.isShowing? 0: STATUSNAVBARHEIGHT;

        if (self.isShowing) {//隐藏

            [self narrowTransToView:NO];

            [UIView animateWithDuration:0.3 animations:^{

                self.myTapBackgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0];

                self.myContentView.alpha = 0;

                self.myContentView.frame = CGRectMake(0,0, SCREEN_WIDTH, contentHeight);

            } completion:^(BOOL finished) {

                [self.myTapBackgroundView removeFromSuperview];

                [self.myContentView removeFromSuperview];

                self.isShowing = NO;

            }];

        }else{//显示

            [self narrowTransToView:YES];

            self.myContentView.frame = CGRectMake(0, STATUSNAVBARHEIGHT, SCREEN_WIDTH, 0);

            [self.view addSubview:self.myTapBackgroundView];

            [self.view addSubview:self.myContentView];

            [UIView animateWithDuration:0.3 animations:^{

                self.myTapBackgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.6];

                self.myContentView.alpha = 1.0;

                self.myContentView.frame = CGRectMake(0, STATUSNAVBARHEIGHT, SCREEN_WIDTH, contentHeight);

            } completion:^(BOOL finished) {

                self.isShowing = YES;

            }];

        }

    }

    /**

     *  @author wujunyang, 15-05-13 15:05:22

     *

     *  @brief  视图区缩放

     *  @param isNarrow 是否缩放

     */

    -(void)narrowTransToView:(BOOL)isNarrow

    {

        _contentView.transform=CGAffineTransformIdentity;

        [UIView beginAnimations:nil context:UIGraphicsGetCurrentContext()];

        if(isNarrow)

        {

        _contentView.transform=CGAffineTransformMakeScale(0.9f, 0.9f);

        }

        else

        {

            _contentView.transform=CGAffineTransformMakeScale(1.0f, 1.0f);

        }

        [UIView commitAnimations];

    }

  • 相关阅读:
    PHP设计模式之装饰器模式
    设计模式之建造者模式
    PHP代码优化技巧
    PHP数组排序函数array_multisort()函数详解
    MySQL索引背后的数据结构及最左原则
    Http协议详解
    把 hhkb 压在mac pro上面用
    cmd 里面运行git提示“不是内部或外部命令,也不是可运行的程序”的解决办法
    哈哈哈 迫于c#的语言特性java才加的注解
    java编程思想 英文版 打卡
  • 原文地址:https://www.cnblogs.com/wujy/p/4480293.html
Copyright © 2011-2022 走看看