首页 > 学院 > 开发设计 > 正文

IOS客户端Coding项目记录(五)

2019-11-14 19:07:23
字体:
来源:转载
供稿:网友

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的子视图,然后作类似操作//隐藏键盘  当前视图上有多个uitextfieldfor(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];   //只需要点击非文字输入区域就会响应hideKeyBoardreturn 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];

}

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表