`
wenxin2009
  • 浏览: 313314 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ios学习流水账3

    博客分类:
  • ios
 
阅读更多

1、线程两种方式:

//1、新开启一个线程
    [NSThread detachNewThreadSelector:@selector(test) toTarget:self withObject:nil];
    //2、GCD线程
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    size_t number = 100;
    dispatch_async(queue, ^{
        dispatch_apply(number, queue, ^(size_t iteration) {
            
        });
    });

 

2、双击事件被单击事件拦截

[singleTap requireGestureRecognizerToFail:doubleTap];

 

3、调试时获取类名

DLOG(@"%@",NSStringFromClass([vc  class]));//通过类获取类名
DLOG(@"%@",NSClassFromString(@"DiscoverViewController"));//通过类名获取类

 

4、KVO,“一对一”对象之间的通信,例子如下:

#import <Foundation/Foundation.h>

@interface StockData : NSObject

@property(nonatomic,strong) NSString *stockName;
@property(nonatomic,assign) float price;
@end


#import "StockData.h"

@implementation StockData

@end

 

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
- (IBAction)btnAction:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *labShow;

@end

//
//  ViewController.m
//  A
//  KVO例子
//  Created by cs on 15/6/7.
//  Copyright (c) 2015年 dwen. All rights reserved.
//

#import "ViewController.h"
#import "StockData.h"

@interface ViewController (){
    StockData *stock;
    UILabel *_lab1;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    stock = [[StockData alloc] init];
    [stock setValue:@"中展" forKey:@"stockName"];
    [stock setValue:@"100.0" forKey:@"price"];
    [stock addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
    
    _labShow.text = [NSString stringWithFormat:@"%@",[stock valueForKey:@"price"]];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (IBAction)btnAction:(id)sender {
    //设值
    [stock setValue:@"20.0" forKey:@"price"];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    if ([keyPath isEqualToString:@"price"]) {
        _labShow.text = [NSString stringWithFormat:@"%@",[stock valueForKey:@"price"]];
    }
}

- (void)dealloc{

    //TODO 清空释放掉

     [selfremoveObserver:selfforKeyPath:@"price"context:nil];

}
@end

 

5、instancetype和id区别:

    相同点:都可作为方法的返回类型

    不同点:

    一、instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型对象。

    二、instancetype只能作为返回值,不能像id那样作为参数

 

6、UImage防止拉伸设置

    UIImage *selectImg = [UIImage imageNamed:@"select-checked"];
    UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 0, 30);
    selectImg = [selectImg resizableImageWithCapInsets:insets];
    [btn setBackgroundImage:selectImg forState:UIControlStateNormal];

 

7、ios中的时间毫秒,long型

        NSNumber *createAtN = [dicPushBody objectForKey:@"createAt"];

 

        long  createAt = [createAtN longValue];

 

8、获取年、月、日

NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
        NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:now];
int year = (int)[dateComponent year];//年

 

9、url schemes 可在Safari浏览器中打开应用。前提是需在工程中plist文件中配置下



 

配置好后,刷到真机上。然后在Safari地址中输入:artgoer://com.test    就可打开应用。

 

10、设置tabBar背景色

      self.tabBar.barTintColor = [ColorUtilcolorFromHexRGB:@"#000000"];//设置tabBar背景色 

 

11、block回传参数应用示例:

   block适合两个页面之前传值,不适合页面乘积深时,回传参数。

    AddressManageViewController.h文件

 

//定义block
typedef void (^AddressManageBlock) (AddressVo *addressVo);//回传参数

@interface AddAddressViewController : UITableViewController

//声明block
@property (strong, nonatomic) AddressManageBlock addressBlock;

@end
 

 

    AddressmanageViewController.m文件

 

if (self.addressBlock) {
                    self.addressBlock(aVo);
                    [self.navigationController popViewControllerAnimated:YES];
                }
 
    SettlementViewController.m文件

 

 

//地址管理
- (void) goAddressManageAction{
    AddressManageViewController *addressVc = [StoryboardUtil getVCWithSbIden:@"My" identify:@"AddressManageViewController"];
    addressVc.scourceType = NSStringFromClass([SettlementViewController class]);
    [self.navigationController pushViewController:addressVc animated:YES];
    addressVc.addressBlock = ^(AddressVo *aVo){
        //TODO
        self.addressVo = aVo;
        [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
    };
}
 

 12、滑动返回上一页。在push后添加如下代码。

GoodsDetailViewController *goodsDetailVC = [StoryboardUtil getVCWithSbIden:@"Goods" identify:@"GoodsDetailViewController"];
    [self.navigationController pushViewController:goodsDetailVC animated:YES];
    
    //TODO滑动返回
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.delegate = nil;
    }

 

12、把view添加到Window上

UIWindow *win = [[UIApplication sharedApplication].delegate window];
 [win addSubview:self.view];

 

13、导航titleView添加自定义View

    UIView *titleV = [[UIView alloc] init];
    titleV.frame = CGRectMake(0, 0, 120, 44);
    _btnTopic = [UIButton buttonWithType:UIButtonTypeCustom];
    [_btnTopic setFrame:CGRectMake(0, 0, 50, 40)];
    [_btnTopic setTitle:@"专题" forState:UIControlStateNormal];
    _btnTopic.titleLabel.font = [UIFont boldSystemFontOfSize:18.0f];
    [_btnTopic setTitleColor:WordTextColor forState:UIControlStateNormal];
    [titleV addSubview:_btnTopic];
    _btnDisplay = [UIButton buttonWithType:UIButtonTypeCustom];
    [_btnDisplay setFrame:CGRectMake(70, 0, 50, 40)];
    [_btnDisplay setTitle:@"展览" forState:UIControlStateNormal];
    _btnDisplay.titleLabel.font = [UIFont boldSystemFontOfSize:18.0f];
    [_btnDisplay setTitleColor:TitleColor forState:UIControlStateNormal];
    [titleV addSubview:_btnDisplay];
    self.navItem.titleView = titleV;

 

14、循环布局约束

for (NSLayoutConstraint *lc in headView.lcSpace) {
                lc.constant = 10;
            }

 

15、图片保存到相册

//图片保存到相册
UIImageWriteToSavedPhotosAlbum(lastImg,  self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);

 

- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{    NSString *message;
    if (!error) {
        message = @"成功保存到相册";
        [self showStrAlert:@"成功保存到相册"];
    }else
    {
        [self showStrAlert:[NSString stringWithFormat:@"%@",error]];
    }
}

 

16、读取ttf文件字体:

-(UIFont*)customFont{
    NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"209" ofType:@"ttf"];
    NSURL *url = [NSURL fileURLWithPath:fontPath];
    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url);
    if (fontDataProvider == NULL)
        return nil;
    CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);    CGDataProviderRelease(fontDataProvider);
    if (newFont == NULL) return nil;
    NSString *fontName = (__bridge NSString *)CGFontCopyFullName(newFont);
    //....
    NSData *data =[fontName dataUsingEncoding:NSUTF8StringEncoding];
    NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    NSString*   temp = [[NSString alloc] initWithData:data encoding:encoding];//data为NSData类型
    NSLog(@"fontName======%@==%@",fontName,temp);
    UIFont *font = [UIFont fontWithName:fontName size:12];
    CGFontRelease(newFont);
    return font;
}

 

17、指定页面禁止侧滑返回:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    // 禁用返回手势
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.enabled = NO;
    }
}
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    //开启返回手势,解决侧滑返回时需跳到指定页面
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
    }

}

 

18、iOS懒加载

//定义
@property (nonatomic,strong) NSMutableArray *dataArr;

//注意
//...在第一次使用时用self.dataArr,而不能用_dataArr,否则不会产生对象
//...当程序进来时不会产生dataArr对象,只有当第一次self.dataArr调用时,这时会走get方法。可以节省不少内存空间。实例化用懒加载是个不错选择

#pragma mark Getter
- (NSMutableArray *) dataArr{
    if (!_dataArr) {
        _dataArr = [[NSMutableArray alloc] init];
    }
    return _dataArr;
}

 

19.UIButton显示图片和文字,呈上下排列,图片显示上方,文字显示下方。

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
            btn.frame = CGRectMake((ScreenWidth/4)*i, 5, ScreenWidth/4, 110);
            [btn.titleLabel setFont:[UIFont systemFontOfSize:15]];
            [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [btn setTitle:vo.label forState:UIControlStateNormal];
            btn.titleLabel.textAlignment = NSTextAlignmentCenter;
            
            UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(btn.imageView.frame.origin.x+32, btn.imageView.frame.origin.y+20, 30, 30)];
            NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:vo.labelPic]];
            UIImage *img = [UIImage imageWithData:data];
            [imageView setImage:img];
            [btn addSubview:imageView];
            //关键代码
            btn.titleEdgeInsets = UIEdgeInsetsMake(28, 0, 0, 0);
            btn.imageEdgeInsets = UIEdgeInsetsMake(-15,25,0,0);

 

  • 大小: 30.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics