美文网首页
iOS开发日记-1

iOS开发日记-1

作者: 单面相反面 | 来源:发表于2016-03-28 20:16 被阅读0次

    2015.4.20一

    1,xcode6第三方库导入问题,现在需要通过 “Group”的方式 导入才能

    2015.4.21二

    1,UIView覆盖全屏幕(包括导航栏)覆盖导航栏和Tabbar

    [[UIApplication sharedApplication].keyWindow addSubview:<#(UIView *)view#>]

    2,初始化视图在-(void)loadView初始化

    2015.4.22三

    QFQ

    1,

    1)数据请求?老的用:HttpTool新的用:HttpClient

    HttpClient 用的队列的方式

    2)Sweep:扫书Side:身边My:我的More:更多

    3)1》Table数据请求返回的数据

    2》封装一个BookInfo类,类中有获取数据方法,例:

    //获取最受欢迎图书馆列表

    + (NSArray*)welcomeBookListWithArea:(NSInteger)iArea dis:(NSInteger)iDis pageIndex:(int)iPageIndex pageSize:(int)iPageSize useLocation:(BOOL)bUseLocation;

    3》填充TableViewCell时,取出需要的信息

    2,文本框提示文字颜色

    [_txtFile setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];

    3,通知中心,记得dealloc

    B.m

    发送通知

    [[NSNotificationCenter defaultCenter] postNotificationName:@'ChangeNameNotification' object:self userInfo:@{@'name':self.nameTextField.text}];

    A.m

    注册一个通知,来调用发生事件

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ChangeNameNotification:) name:@'ChangeNameNotification' object:nil];

    删除通知

    [[NSNotificationCenter defaultCenter] removeObserver:self];

    调用,显示

    -(void)ChangeNameNotification:(NSNotification*)notification{

    NSDictionary *nameDictionary = [notification userInfo];

    self.nameLabel.text = [nameDictionary objectForKey:@'name'];

    }

    4,.mm文件,如果用到了C++,需要改为mm

    5,轻量级本地数据储存: NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    id sLibraryID = [userDefaults objectForKey:@“LibraryId”];//读取数据

    [userDefaults setValue:@“” forKey:@“CardId”]; //存入数据

    /UsersLibrary/Application Support/iPhoneSimulator/4.1/Applicati*****/29788E40-AF47-45A0-8E92-3AC0F501B7F4/,(这个是应用程序对应在mac上的位置)

    这个下面有/Library/Prefereces,里面有个plist文件,存储的就是你的userDefaults

    ,编程语言这种东西,好比国语,学习国语一开始先从26的字母学起,然后到拼音,到汉字,然后进入到词组阶段,开始造句,每个人对词语的敏感度不同,然后写出来的文字也不一样。有些生动美丽,有些生涩难懂。编程就是如此,到了词组阶段,自然就可以造出各种各样的语句。

    2015.4.23四

    1,照片压缩

    2,关于枚举的要点

    1)应该用枚举来表示状态机的状态、传递给方法的选项以及状态码等值,给这些值起个易懂的名字

    2)如果把传递给某个方法的选项表示为枚举类型,而多个选项又可同时使用,那么就将各选项值定义为2的幂,以便通过按位或操作将其组合起来,使用 NSTimer 的时候,在视图即将消失的时候,如果没有置为nil ,返回上一个视图的时候会卡屏

    3)用NS_ENUM与NS_OPTIONS宏来定义枚举类型,并指明其底层数据类型。这样做可以确保枚举是用开发者所选的底层数据类型实现出来的,而不会采用编译器所选的类型

    4)在处理枚举类型的switch语句中不要实现default分支。这样的话,加入新枚举之后,编译器就会提示开发者:switch语句并未处理所有枚举

    2015.4.28二

    1,delegate在视图即将消失的时候应该释放掉,delegate = nil;

    2,TextField文本框的缩进,

    textField.leftView = clearSpaceView

    textField.leftViewMode = UITextFieldModAlways

    2015.5.15五

    1,自定义导航,手势返回上一个视图控制器

    2,数据请求的优化:

    头部刷新时,请求回来的数据和已存在的数据,判断第一个对象,如果相同,说明更新内容一样,就不需要重新加载;

    尾部刷新时,请求回来的数据和已存在的数据,判断两组数据的最后一个对象是否相同,如果相同,说明更新内容一样,同样不需要加载

    3,内存警告处理,根据需求决定优先级,Crash还是将当前页面的控件和数据置为nil,

    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_6_0

    #endif

    4,判断页数如:每页10条数据iPageIndex = count % 10 == 0 ? count / 10 + 1 : count / 10 + 2

    5,二维码扫描,没有设置扫描的范围,当二维码全部进入相机,当时没有全部进入限制的相框时,扫描就完成了,影响客户体验

    2015.5.26二

    1,在使用NSTimer的时候,在视图即将消失的时候,如果没有置为nil,在返回上个视图的时候会卡屏

    [_timer invalidate];//暂停NSTimer

    _timer = nil;

    2,NSTimer 关闭和打开方法

    //关闭定时器

    [_timer setFireDate:[NSDate distantFuture]];

    //打开定时器

    [_timer setFireDate:[NSDate distantPast]];

    3,NSTimer 在有 UIScrollView 的时候记得将NSTimer放入混合模式,原因是因为苹果手机在执行代码的时候优先将所有性能放在UI上,优先执行UI操作,然后才执行其他操作。

    2015.5.27三

    1,在xcode6 中导入 MJRefresh第三方库, 会报错 unknown type’NSString’…

    原因:由于xcode6取消了 .pch 文件,所以没有导入Foundation.framework 和 UIKit.framework 框架

    解决方法:在MJRefreshConst.m头部加上

    #import

    #import

    2,第三方 SDImage

    报错:objc_msgSend(self.beginRefreshingTaget, self.beginRefreshingAction, self);

    Too many arguments to function call, expected 0, have 3

    解决方案:

    选中项目 - Project - Build Settings - ENABLE_STRICT_OBJC_MSGSEND将其设置为 NO 即可

    ——————————

    导入第三方SDImage 导入框架

    1.导入ImageIO.framework

    2.导入MapKit.framwork

    2015.5.28四

    1,设置UIButton在高亮状态时的背景色,可以通知实例化一个纯颜色的UIImage

    #pragma mark -实例化一个纯颜色的UIImage

    - (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size

    {

    CGRect rect = CGRectMake(0, 0, size.width, size.height);

    //创建一个默认的位图

    UIGraphicsBeginImageContext(rect.size);

    //设置上下文

    CGContextRef context = UIGraphicsGetCurrentContext();

    //填充颜色

    CGContextSetFillColorWithColor(context, [color CGColor]);

    CGContextFillRect(context, rect);

    //接收返回的UIImage

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return image;

    }

    2015.5.29五

    1, 公用一个ScrollView、TableView等,在视图切换的时候,如何记录当前坐标,以便切换视图时能返回之前所在位置

    解决方案:

    1)不用同一个 ScrollView, 封装成两个以上的View

    2)调用UIScrollViewDelegate 的函数

    #pragma mark - UIScrollViewDelegate

    //Scroll停止滚动就会调用这个函数

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView

    {

    //NSLog(@"当前Frame(%@)",NSStringFromCGRect(scrollView.frame));

    //NSLog(@"当前大小(%@)",NSStringFromCGSize(scrollView.contentSize));

    //判断当TableView处于刷新状态时,不记录当前TableView的坐标

    //

    if (scrollView.contentSize.height - CGRectGetHeight(scrollView.frame) <= scrollView.contentOffset.y || scrollView.contentOffset.y >= 0) {

    //NSLog(@"------(%@)--------",@(scrollView.contentOffset.y));

    if (_CurrentTypeIsThemeOrApply == ISTHEME) {

    _currentThemeY = _themeTableView.contentOffset.y;

    } else {

    _currentAlApplyY = _themeTableView.contentOffset.y;

    }

    }

    }

    2,同时点击两个以上的按钮,触发事件,会相继 PUSH 各自的ViewController.

    解决方法:

    1)控制可点击的触摸数量;

    2)限制按钮事件,声明一个BOOL的常量设为NO,控制事件只允许发生一次,在事件发生完之后改成YES

    2015.6.9二

    1, 监听文本框输入有两种方法。

    1)使用UITextFeildDelegate

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

    {

    //延迟0.2秒执行事件

    [self performSelector:@selector(textChange) withObject:nil afterDelay:0.2];

    return YES;

    }

    2)通知中心

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:nil]

    2,注册,忘记密码代码优化

    当所有文本框都输入字符时,注册按钮才可点击,样式为可点击样式,否则不可点击,又换一种样式

    因为使用UITextFieldDelegate中监听文本框输入,每次输入字符都会调用一次代理函数,每次调整按钮高亮状态时,都会不断的实例化新的UIImage,增加内存,解决方法就是有一个全局的UIImage,然后利用延迟加载的方式,这样一旦判断存在这个UIImage,就只会用到一个UIImage

    2015.6.10三

    1,如何让UITabbar界面在PUSH进一个ViewController隐藏,然后在POP回来的时候显示。

    解决方法:

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:customTabbar];

    nav.navigationBar.hidden = YES;

    [self.window setRootViewController:nav];

    2015.6.11四

    1,修改状态栏文字颜色,重写返回状态栏方法

    // 如果调用[UIApplication sharedApplication] set ..的方法用不了可以用下面的重写方法

    -(UIStatusBarStyle)preferredStatusBarStyle

    {

    if (_scrollMain.contentOffset.y>150) {

    _currentStatusBayStyle = UIStatusBarStyleDefault;

    }

    else {

    _currentStatusBayStyle = UIStatusBarStyleLightContent;

    }

    return _currentStatusBayStyle;

    }

    [self setNeedsStatusBarAppearanceUpdate];

    // plist,设置

    View controller-based status bar appearanceNO

    2015.6.11五

    1,一般项目中,在加载页的时候一般不会出现状态栏,所有一般隐藏状态栏(在“加载页的时候”隐藏,等到主界面还得显示出来)

    2015.6.17三

    1,枚举与宏的区别

    宏和枚举之间的差别主要在作用的时期和存储的形式不同,宏是在预处理的阶段进行替换工作的,它替换代码段的文本,程序运行的过程中宏已不存在了。而枚举是在程序运行之后才起作用的,枚举常量存储在数据段的静态存储区里。宏占用代码段的空间,而枚举除了占用空间,还消耗CPU资源

    2015.7.1三

    1,使用UITableView布满全屏时,当界面即将消失时,会自动下移20像素,这是由于代理引起的,需要设置粘稠,或者在界面即将消失时重新设置Y为-20.

    2015.7.6一

    1,UITableViewCell在全屏时,Cell无法填充到状态栏,会自动偏移y坐标,解决方法

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView

    {

    if (scrollView.tag == 1) {

    CGFloat sectionHeaderHeight = -20;

    if (scrollView.contentOffset.y <= sectionHeaderHeight && scrollView.contentOffset.y >= 0)

    {

    scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);

    }

    else if (scrollView.contentOffset.y >= sectionHeaderHeight)

    {

    scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);

    }

    }

    }

    2015.7.24一

    1,通知中心没有dealloc会导致的问题

    1)第一次实例化界面,通知中心并没有调用NSNotification的函数

    2,检查版本更新

    NSString* http = @"http://itunes.apple.com/lookup?id=924306089";

    [HttpClient GetAsync:http parameters:nil needCache:0 completion:^(id response, NSHTTPURLResponse *urlResponse, NSError *error) {

    if (error||response == nil) {

    block(nil);

    return ;

    }

    NSDictionary* responseDict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:&error];

    if (responseDict == nil) {

    block(nil);return ;

    }

    ResultInfo* result = [ResultInfo new];

    result.iRet = 0;

    NSDictionary* resultDict = [responseDict[@"results"] firstObject];

    NSString*version = resultDict[@"version"];

    NSString* currentVersion = APPVersion;

    version = [version stringByReplacingOccurrencesOfString:@"." withString:@""];

    currentVersion = [version stringByReplacingOccurrencesOfString:@"." withString:@""];

    BOOL bNeedUpdate = [version integerValue] > [currentVersion integerValue] ? YES:NO;

    NSDictionary* dict = @{@"NewVersion":version,@"NeedUpdate":[NSNumber numberWithBool:bNeedUpdate],@"UpdateUrl":resultDict[@"trackViewUrl"]};

    result.oRet = dict; //为Yes表示需要更新

    block(result);

    2015.8.24一

    1, ViewController上可以继续放ViewController,屏幕上切换不同类型,可以通过这种方式实现

    相关文章

      网友评论

          本文标题:iOS开发日记-1

          本文链接:https://www.haomeiwen.com/subject/genjlttx.html