的菜鸟第一天去健身房iOS公司应该注意什么

ios开发第一天上班做些什么_百度知道
ios开发第一天上班做些什么
我有更好的答案
了解了解公司,交接资料就算完了。可能领导还会给你介绍你未来的工作,你就随便学习学习,让别人看到你不是在那里干坐或玩游戏就行,摆弄点什么入职第一天一般啥也不用干
采纳率:73%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)六天完成一个简单iOS App - 第一天 - 简书
六天完成一个简单iOS App - 第一天
仿照百思不得姐,通过看李明杰老师视频学习自己实践并简单总结项目开发过程中普遍遇到的问题,并且将可以用到其他项目中的分类方法进行简单总结,便于以后在别的项目中使用。
1. 实现相应功能
2. 代码重构,简单优化
第一天任务:
配置项目基本环境
配置项目基本环境
一. 接口获取
我们可以通过Charles等工具抓包来获取我们想做的App的接口,然后通过解析将每个接口的数据解析出来。也可以去知乎中找找看。
二. 项目图片获取方式
图片的获取非常简单,我们只要将iTunes中的项目拖到桌面,然后改后缀名为zip,然后在解压就可以了,更简单暴力的可以使用运行后直接将项目拖进去,就会自动解压图片。
三. 配置基本环境
创建好项目之后,之后要做的就是配置项目基本信息,首先在info.plist中设置一些基本信息,这里挑选几个比较重要的
其中Bundle name是应用的名称,默认与项目名称相同,可以更改。
项目使用代码,storyboard,和xib结合完成,但是框架的搭建不建议使用storyboard,因为框架的搭建往往页面比较多,多个页面挤在storyboard中实在难受,并且难找。所以框架的搭建就使用代码了。
启动图片的设置在LaunchScreen.storyboard中,当然也可以在Assets.xcassets中直接拖入启动图片,但是需要在General中设置
然后我们就会发现在Assets.xcassets中除了AppIcon文件夹还多了Brand Assets文件夹,将启动图片直接拖到Brand Assets中就可以了。AppIcon中放应用图标。
关于图片素材,个人习惯在项目开始前就将图片全部放到Assets.xcassets中,这样使用的时候方便去找。也可以再用到的时候在将使用到的图片素材拖入到Assets.xcassets中,防止一下拖入过多图片素材,不好找。
应用名称,应用图片,应用启动图片设置好之后,需要根据项目分出模块,观察项目发现由5个模块组成,精华,新帖,发布,关注,和我,那么我们将每个模块的代码放在一起,并在根据MVC原则将每个模块的代码细分为3部分。如图
注意要在文件show in finder 中创建文件,在项目中直接新建的文件夹并不是真实存在的,模块的区分有利于我们对项目模块的理解,更加快捷方便的找到要找的模块,开发也更简单明了
一. 框架结构
框架的搭建使用经典的UITabBarController -& UINavigationController -& UIViewController结构。如图
框架基本结构
UITabBarController 中添加五个UINavigationController,UINavigationController的子控制器来显示内容,管理自己的NavigationBar。
二. 解决实际问题
1. UITabBarItem自动将图片文字渲染成蓝色
图片文字被自动渲染成蓝色
解决方法:解决图片渲染成蓝色
// 产生一张不会进行自动渲染的图片
UIImage *selectedImage = [tempImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
直接在Assets.xcassets中选中图片设置即可
Paste_Image.png
文字被渲染成蓝色,我们可以通过富文本来解决。
/* 文字属性 */
//普通状态下的文字属性
NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary];
normalAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:14];
normalAttrs[NSForegroundColorAttributeName] = [UIColor grayColor];
// 选中状态下的文字属性
NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary];
selectedAttrs[NSForegroundColorAttributeName] = [UIColor darkGrayColor];
// 设置tabBarItem字体
[vc0.tabBarItem setTitleTextAttributes:normalAttrs forState:UIControlStateNormal];
[vc0.tabBarItem setTitleTextAttributes:selectedAttrs forState:UIControlStateSelected];
多个tabBarItem每个都需要设置一遍同样的内容,tabBarItem提供了统一设置的方法,我们可以用appearance属性来对所有的tabBarItem进行统一设置
/**** 设置所有UITabBarItem的文字属性 ****/
// 这里对item进行设置,即相当于对所有item进行统一设置
UITabBarItem *item = [UITabBarItem appearance];
appearance的使用注意:方法或者属性后面必须有UI_APPEARANCE_SELECTOR才可以获得appearance属性进行统一设置,否则则不可以使用appearance属性。例如
UI_APPEARANCE_SELECTOR
2. UITabBar 中间添加按钮的实现
我们知道中间加号按钮是没有标题的,即使我们将标题设置为空,还有有标题的label站位,所以UITabBarItem是不能实现了,那么我们只能将一个button覆盖在中间这块区域上。
方法一:添加站位控制器,我们可以在中间的位置上添加一个空的站位控制器,然后将button覆盖到UITabBar中间,这样做简单方便,但是创建了一个Controller和一个UITabBarItem没有别的用处只是用来站位,虽然并不会消耗很多空间,但是总是觉得十分别扭。
中间button覆盖在原有UITabBarItem上
方法二:自定义tabbar重写layoutsubViews方法
为了避免第一种方法产生站位Controller和UITabBarItem,我们自定义一个UItabbar,重写layoutsubViews尝试我们自己控制TabBarItem的位置,实现方法很简单,将UITabBar平均分为5段,将中间空出,其他四个TabBarItem设置完frame之后,懒加载button添加到中间位置。并实现其点击方法
layoutSubviews方法。
- (void)layoutSubviews
[super layoutSubviews];
/**** 设置所有UITabBarButton的frame ****/
// 按钮的尺寸
CGFloat buttonW = self.frame.size.width / 5;
CGFloat buttonH = self.frame.size.
CGFloat buttonY = 0;
// 按钮索引
int buttonIndex = 0;
for (UIView *subview in self.subviews) {
// 过滤掉非UITabBarButton
// if (![@"UITabBarButton" isEqualToString:NSStringFromClass(subview.class)])
if (subview.class != NSClassFromString(@"UITabBarButton"))
// 设置frame
CGFloat buttonX = buttonIndex * buttonW;
if (buttonIndex &= 2) { // 右边的2个UITabBarButton
buttonX += buttonW;
subview.frame = CGRectMake(buttonX, buttonY, buttonW, buttonH);
// 增加索引
buttonIndex++;
/**** 设置中间的发布按钮的frame ****/
self.publishButton.frame = CGRectMake(0, 0, buttonW, buttonH);
self.publishButton.center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5);
3. 实现UINavigationController 返回按钮统一设置
方法一:创建基类,其他继承基类,自动有这个按钮类型
创建一个UINavigationController基类,设置好统一的返回按钮,然后让其他导航栏控制器继承于他,这样可以达到返回按钮统一,但是这样做有一个局限性,UINavigationController的子控制器是固定的,例如UIViewController,如果我们需要使用UITableViewControlller则需要自己创建tableView。比较麻烦
方法二:自定义UINavigationController 重写pushViewController方法
重写pushViewController方法,判断NavigationController子控制器的个数,如果不是第一个push进来的控制器,则添加左边返回按钮。
注意:NavigationController的根控制器也是push进来的,所以需要判断是否是根控制器
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
if (self.childViewControllers.count & 0) { // 不是第一个push进来的 左上角加上返回键
// 返回button初始化以及设置
// 将button放置在leftBarButtonItem
viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:button];
[super pushViewController:viewController animated:animated];
4. pop右划手势失效的问题
当我们重写posh方法后,发现pop右划返回的手势失效,我们猜想是系统的返回按钮做了一些事情,而我们自己的button没有实现,解决办法,遵循代理,并实现代理方法
self.interactivePopGestureRecognizer.delegate =
// 实现代理方法
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
// 判断如果不是根控制器 才需要pop返回手势
return self.childViewControllers.count & 1;
三. 代码重构与优化
1. UINavigationControlller 设置左右UIbarbuttonitem代码的抽取
我们发现每一个UINavigationControlller根控制器中都需要写一大段相同的代码来设置UIbarbuttonite,那么我们写一个UIbarbuttonitem的分类抽取一个方法来简化代码。
@implementation UIBarButtonItem (CLExtension)
+(instancetype)itemWithImage:(NSString *)image HeightImage:(NSString *)heightImage Target:(id)target action:(SEL)action
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:heightImage] forState:UIControlStateHighlighted];
[button sizeToFit];
[button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
return [[UIBarButtonItem alloc]initWithCustomView:button];
这样我们在根控制器中设置UIbarbuttonitem一句话就搞定了
// 设置左边按钮button
self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithImage:@"MainTagSubIcon" HeightImage:@"MainTagSubIconClick" Target:self action:@selector(leftBtnClick)];
2. uiview关于frame的分类
当我们在设置控件的宽高以及位置的时候需要设置self.frame.size.代码很长,那么我们可以写一个UIView的分类,直接就可以通过self.height来设置其高度。
UIView+CLExtension.h
@interface UIView (CLExtension)
@property(nonatomic,assign)CGFloat cl_
@property(nonatomic,assign)CGFloat cl_
@property(nonatomic,assign)CGFloat cl_x;
@property(nonatomic,assign)CGFloat cl_y;
@property(nonatomic,assign)CGFloat cl_centerX;
@property(nonatomic,assign)CGFloat cl_centerY;
UIView+CLExtension.m
@implementation UIView (CLExtension)
-(void)setCl_width:(CGFloat)cl_width
CGRect frame = self.
frame.size.width = cl_
self.frame =
-(CGFloat)cl_width
return self.frame.size.
-(void)setCl_height:(CGFloat)cl_height
CGRect frame = self.
frame.size.height = cl_
self.frame =
-(CGFloat)cl_height
return self.frame.size.
-(void)setCl_x:(CGFloat)cl_x
CGRect frame = self.
frame.origin.x = cl_x;
self.frame =
-(CGFloat)cl_x
return self.frame.origin.x;
-(void)setCl_y:(CGFloat)cl_y
CGRect frame = self.
frame.origin.y = cl_y;
self.frame =
-(CGFloat)cl_y
return self.frame.origin.y;
-(void)setCl_centerX:(CGFloat)cl_centerX
CGPoint center = self.
center.x = cl_centerX;
self.center =
-(CGFloat)cl_centerX
return self.center.x;
-(void)setCl_centerY:(CGFloat)cl_centerY
CGPoint center = self.
center.y = cl_centerY;
self.center =
-(CGFloat)cl_centerY
return self.center.y;
这样我们在设置宽高,x,y的时候就可以直接通过height,width,x,y来设置了,建议在这些属性前面加上前缀,防止和其他文件属性冲突
3. PCH文件
所有文件都用的到的东西,例如颜色设置的宏,分类,修改的输出日志等等,我们可以写到PCH文件中,保证所有的文件都可以用,而不用频繁的每个类中都引入
#ifdef __OBJC__
/** 在这之间的 在OC文件中会引用 防止OC与C混编的时候引起错误 **/
#import "UIView+CLExtension.h"
#import "UIBarButtonItem+CLExtension.h"
#define CLLogfunc CLLog(@"%s",__func__);
/******** 输出日志 ********/
#ifdef DEBUG
#define CLLog(...) NSLog(__VA_ARGS__)
#define CLLog(...)
/******** 日志输出 ********/
/******** 关于颜色的宏********/
// 带透明度的颜色
#define CLColorA(r,g,b,a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)]
// 不带透明度的颜色
#define CLColor(r,g,b) CLColorA(r,g,b,1);
// 随机颜色
#define CLRandomColor CLColor(arc4random_uniform(255),arc4random_uniform(255),arc4random_uniform(255))
#define CLCommonColor(v) CLColor(v,v,v)
/******** 关于颜色的宏********/
这是目前的pch文件内容,如果项目报错找不到pch文件,那是因为pch文件路径可能换了,在BuildSettings 搜索 prefix header
,直接将pch拖入其中自动生成路径即可。
分类中能不能添加属性呢?之前uiview关于frame的分类不就是给分类添加了许多属性吗?
1. 分类原则是不可以添加属性,只能添加方法,我们之前给 UIView增加了一些属性,而且为其实现了相应的 getter和 setter方法。而这些方法实际上访问的是本类的frame属性,其实frame,bounds也是定义在分类里边的
frame,bounds也是定义在分类里
可以看到,这种定义在分类里的属性,实际上是实现了相应的方法,并在方法里边通过访问其它属性来达到目的。这通常用来简化某些操作。
2. 在分类中可以写@property添加属性,但是不会自动生成私有属性,也不会生成set,get方法的实现,只会生成set,get的声明,需要我们自己去实现。
3. 为什么不直接设置frame而需要一个中间量来设置呢?
因为在分类的方法实现中不可以直接访问本类的私有属性,但是可以调用本类的set,get方法。
4. 当分类中有和本类中同名的方法的时候,优先调用分类的方法,如果多个分类中有相同的方法,优先调用最后编译的分类。
5. 分类可以通过Runtime运行时给分类添加属性,对象的属性其实是让属性与对象产生关联,如果想动态添加属性,其实是动态产生一种关系,让对象的某个属性可以关联到另外一块内存地址。
今天的任务已经完成,我们完成了环境的配置,主框架的搭建,以及对一些繁琐重复的代码做了简单整理。第一天效果如下
第一天效果
文中如果有不对的地方欢迎指出。我是xx_cc,一只长大很久但还没有二够的家伙。
一只长大很久但还没有二够的家伙
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
此文章转自github:https://github.com/Tim9Liu9/TimLiu-iOS 介绍 这是一个用于iOS开发的各种开源库、开源资料、开源技术等等的索引库. 具体内容 ============================= 版本管理@ 依赖管理@ G...
昨天看到一则新闻,日经亚洲评论说理光可能会放弃品牌,重新评估自己旗下的相机部门,不排除取消相机部门的考虑。虽然之后理光发声明否认了这个消息,但是相信这个消息也并非空穴来风,因为理光的综合净利润已经减少了 20 亿日元,幅度达到了惊人的 97%,再不进行调整,亏损将不可避免。...
生活中太多无奈太多感慨,人都是脆弱的,卸下灰甲,内心的独白只有自己懂。外表看起来很坚强,遇到困难总会迎难而上,只有深夜里才会看到自己的脆弱与无助。
多少在外打工拼搏的人,是为了努力挣钱寄钱养活家庭,有多少还是孩子的人就早已靠自己的双手挣钱,当同年龄的朋友还溺在父母的怀里...
近期我刚刚读完《灰犀牛》这本书,本书详细讲述了多种类型的,“灰犀牛事件”的具体成因,以及当遭遇了此类事件的时候,正确应对方法。同时也为读者列举出了一些,有关该如何尽早做好预防“灰犀牛事件”发生的精彩案例。在阅读本书的时候,我不禁想起了曾经有过的一次类似经历……
上周计划好这周末要去烘培学院,洽谈活动的事。 周六,我一直在想着要不要带俩娃去市区,结果二宝醒来已是下午四点半,大宝超着要去游泳,最后决定去游泳。游玩回来,吃晚饭,给大宝讲艺术史,很快他就睡着了。这套书是同事送我们的,收到后,我很开心。巧的是最近刚好在看蒋勋老师的《西方美术...
7月28日,晃眼间一个月又到了末尾,回头望去,七月的我有怎样的得失,也该总结一下了。 7月7日,作为007一个比较有纪念意义的日子,覃杰宣布了一个大计划,但因为工作的原因,我知道我只能用心点赞了。这一天,金马精心设计了一场快速成长的发布会,分享自己的改变,让我感受到成长与成...新人到单位工作的第一天应当注意些什么_百度知道
新人到单位工作的第一天应当注意些什么
如题 具体要做些什么表现好的事情 应当注意些什么
我有更好的答案
  职场与校园是完全不一样的环境,大学生校园里养成的生活习惯和性格特点可能并不符合职场的要求。很多大学生朋友非常不适应第一份工作,那究竟怎么开展第一份工作?第一份工作应该注意哪些呢?  首先心态要改变,心态决定你的适应程度。在大学里是天之骄子,在公司里你就是一只菜鸟。姚明刚进NBA时还替弗老大拎包了,更何况你啊!因此,放低心态虚心学习向任何人学习是最好的选择。只有抱着学习的态度,别人才会教你给予你更多的学习机会。如果不懂装懂,别人以为你都会就不会再给你机会,从而失去锻炼成长的机会。  其次,对公司的任何人都要给予足够的尊重,哪怕是保安、清洁员。他们对你的评价有可能影响你的直系主管或人力资源主管对你的看法。同时,当团队成员需要帮助时,哪怕不是你的份内活,也应毫不犹豫地给予帮助。正所谓“得道者多助,失道者寡助”,你给予别人帮助别人就会在适当的时机给予回报,这样就很容易形成有助于你职场生存与发展的势场!  第三,主动揽活,抢着干,只有这样才能获得更多的表现机会。甚至别人都休息时你还在干,笔者一直坚信一句话:赢在别人休息时。职场竞争异常激烈,只有付出加倍的努力你才能获得主管的青睐。做事要追求精益求精,只有更好没有最好。任何事情都有改善的空间,最好每一次表现都超过主管的期望值。  第四,要学会拍马屁,说得俗一点就是学会赞美,大学生朋友特别欠缺这一点。职场里的任何一个人都喜欢被肯定、被赞美,赞美的话别人听着舒服,听着舒服就会对你留下深刻的印象。笔者发现很多大学生朋友说话特别硬,不够圆滑,说出的话有道理就是别人听着不舒服,听着不舒服别人就不会采纳,职场影响力自然就不高了。  第五,早上早一点到,晚上晚一点走。尽管准时到公司、准时离开公司没有违反公司的规定,主管对你也不会说什么,但是会给主管留下不好的印象,主管会想一个菜鸟那么早就走干什么去而且也会给主管留下对工作不够用心的印象。早点来晚点走能够显示出你对第一份工作的重视程度,也就是告诉老板你对工作很用心。  第六,很多朋友刚入职场感觉主管不怎么重视你。其实不是,主管有很多事情要做,不会给予你太多的时间,你只要认真工作就可以了。老板没跟你说话不代表不关注你,你会通过各种渠道去了解你的表现。因此,新人们每一天结束的时候应主动向主管回报你的工作进展,让主管知道你的现状,也只是这样主管才会知道你的不足,知道你的不足才能更具针对性地帮助你。  第七,中午吃饭的时候最好不要一个吃,要知道同事间的感情大部分是在餐桌上形成的。因此,与同事吃饭还可以加深对同事的了解,有助于你以后与其相处。长期的一个人吃饭很容易变成职场边缘人,谁都不重视。如果你中午下去买东西,你最好问一句谁需要带东西,就可以增加与别人的沟通机会。  第八,进公司不久最好能叫上每一个人的姓名包括了解每个人的爱好,叫上名字能够增加你们间的熟悉程度有助于工作的开展;了解爱好能够增加你们间的讨论话题。你了解的越多你越有话说,不至于与同事见面时不知道说什么好。
采纳率:27%
不知道你是不是刚毕业的学生,如果是的话,最主要的是勤劳,一直得把自己当作个晚辈,态度要谦虚,言谈举止方面要量力而行,不要勉强,再有就是服装整洁,给人一个好的印象…
为您推荐:
其他类似问题
您可能关注的内容
第一天的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 第一天去上班 的文章

 

随机推荐