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];

}

 

posted @ 2015-05-05 21:06  踏浪帅  阅读(503)  评论(0编辑  收藏  举报