积少成多,每天进步一点点,2016/5/10
Xcode控制台字体为SF Mono
1--xib约束自适应
xib或者系统的cell局部空间需要自适应时,使用下面代码,将IB中的约束当做属性拖出来,然后利用以下语句动态给其赋值
CGSize sizeFit = [self.primeCostLabel.text sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]}];
//动态计算测量
CGSize sizeFit = [cell.nameLabel.text sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]}];
cell.nameLabelWidth.constant = sizeFit.width;
2--通过点击的控件获取对应的cell的index
例如每个cell上有个button,用以下方法:
//
// HGManageOrdersTableViewCell *cell = (HGManageOrdersTableViewCell * )[senderButton superview].superview;
// NSIndexPath *indexPath = [_myFirstTableView indexPathForCell:cell];
// NSLog(@"发货按钮对应index%ld",(long)indexPath.section);
3--给imageView添加手势
imageView用户交互默认是关闭的,需手动打开
cell.firstAddImageView.userInteractionEnabled = YES;
4--iOS富文本(指定区间的文字变色,变字形等)
NSMutableAttributedString *nowPrice = [[NSMutableAttributedString alloc]initWithString:@"现价:¥"];
[nowPrice addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(3, 1)];
cell.nowPriceLabel.attributedText = nowPrice;
5--判断点击点是否在某一区域内
//矩形区间判断点击点范围
/*
// //点击点(在tableview中)
// CGPoint tableViewPoint = [sender locationInView:self.myTableView];
//
// CGRect rect00 = [oneCell convertRect:oneCell.firstAddImageView.frame toView:self.myTableView];
// if (CGRectContainsPoint(rect00, tableViewPoint)) {
// NSLog(@"第一行,第一个");
// [self addPicture:oneCell withIndex:0];
// return;
// }
*/
6--等待某一事件执行完成之后再执行其他
有时候系统的方法在for循环里,即使用线程也没有办法保证优先走完整个循环再执行后边的,以下办法亲测有效
ALAssetsLibrary *assetLibrary=[[ALAssetsLibrary alloc] init];
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
for (NSURL *url in self.finalImagesArray) {
dispatch_async(queue, ^{
[assetLibrary assetForURL:url resultBlock:^(ALAsset *asset) {
UIImage * image = [UIImage imageWithCGImage:asset.aspectRatioThumbnail];
NSData *data = [HGRequestManager reSizeImageData:image maxImageSize:800 maxSizeWithKB:1024.0];
NSString *string = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
[imageArray addObject:string];
NSLog(@"转码中...");
dispatch_semaphore_signal(sema);
}failureBlock:^(NSError *error) {
dispatch_semaphore_signal(sema);
NSLog(@"error=%@",error);
}];
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
7--下拉刷新与上拉加载
// 1.下拉刷新
_tableView.mj_header= [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 模拟延迟加载数据,因此2秒后才调用(真实开发中,可以移除这段gcd代码)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 结束刷新
[_tableView.mj_header endRefreshing];
});
}];
// 设置自动切换透明度(在导航栏下面自动隐藏)
_tableView.mj_header.automaticallyChangeAlpha = YES;
// 2.上拉加载
_tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
// 模拟延迟加载数据,因此2秒后才调用(真实开发中,可以移除这段gcd代码)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 结束刷新
[_tableView.mj_footer endRefreshing];
});
}];
8--二维码扫描识别区域问题
//设置rectOfInterest///CGRectMake(y的起点/屏幕的高,x的起点/屏幕的宽,扫描的区域的高/屏幕的高,扫描的区域的宽/屏幕的宽)
// //扫描框
_boxView = [[UIView alloc]init];
_boxView.frame = CGRectMake(0, 0,SCREEN_WIDTH * 0.6, 120);
_boxView.center = self.view.center;
// _boxView = [[UIView alloc]initWithFrame:CGRectMake(0,0,100,100)];
_boxView.layer.borderColor = [UIColor redColor].CGColor;
_boxView.layer.borderWidth = 0.5f;
[_scanView addSubview:_boxView];
outPut.rectOfInterest = CGRectMake(_boxView.frame.origin.y/SCREEN_HEIGHT, _boxView.frame.origin.x/SCREEN_WIDTH, _boxView.frame.size.height/SCREEN_HEIGHT, _boxView.frame.size.width/SCREEN_WIDTH);
9--使用贝塞尔曲线实现button圆角
UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(120, 10, 80, 80)];
view2.backgroundColor = [UIColor redColor];
[self.view addSubview:view2];
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view2.bounds byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = view2.bounds;
maskLayer.path = maskPath.CGPath;
view2.layer.mask = maskLayer;
10--设置日期时的dateFormatter代号
纪元的显示:
G:显示AD,也就是公元
年的显示:
yy:年的后面2位数字
yyyy:显示完整的年
月的显示:
M:显示成1~12,1位数或2位数
MM:显示成01~12,不足2位数会补0
MMM:英文月份的缩写,例如:Jan
MMMM:英文月份完整显示,例如:January
日的显示:
d:显示成1~31,1位数或2位数
dd:显示成01~31,不足2位数会补0
星期的显示:
EEE:星期的英文缩写,如Sun
EEEE:星期的英文完整显示,如,Sunday
上/下午的显示:
aa:显示AM或PM
小時的显示:
H:显示成0~23,1位数或2位数(24小时制
HH:显示成00~23,不足2位数会补0(24小时制)
K:显示成0~12,1位数或2位数(12小時制)
KK:显示成0~12,不足2位数会补0(12小时制)
分的显示:
m:显示0~59,1位数或2位数
mm:显示00~59,不足2位数会补0
秒的显示:
s:显示0~59,1位数或2位数
ss:显示00~59,不足2位数会补0
S: 毫秒的显示
时区的显示:
z / zz /zzz :PDT
zzzz:Pacific Daylight Time
Z / ZZ / ZZZ :-0800
ZZZZ:GMT -08:00
v:PT
vvvv:Pacific Time
11--GCD网站
http://www.samirchen.com/ios-gcd/
12--iOS坐标转换
iOS-- 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];
版权:转自http://blog.csdn.net/xuhuan_wh/article/details/8486337
13--为系统类添加属性
新建时选择category
@interface NSString (Ass)
给NSString类添加两种类型的属性, 字符串类型的tag值strFlag, 以及int型的tag值intTag.
定义这个两个属性的set和get方法:
// 对象属性的set和get
- (void)setStrFlag:(NSString *)strFlag;
- (NSString *)strFlag;
// 非对象属性的set和get
- (void)setIntFlag:(int)intFlag;
- (int)intFlag;
@end
实现这四个方法:
需导入runtime头文件:
#import <objc/runtime.h>
@implementation NSString (Ass)
static int _intFlag;
static NSString *_strFlag;
- (void)setStrFlag:(NSString *)flag {
// void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
objc_setAssociatedObject(self, &_strFlag, flag, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)strFlag {
// id objc_getAssociatedObject(id object, const void *key)
return objc_getAssociatedObject(self, &_strFlag);
}
- (void)setIntFlag:(int)intFlag {
NSNumber *t = @(intFlag);
// void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
objc_setAssociatedObject(self, &_intFlag, t, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (int)intFlag {
// id objc_getAssociatedObject(id object, const void *key)
NSNumber *t = objc_getAssociatedObject(self, &_intFlag);
return (int)[t integerValue];
}
@end
14--去掉tableViewCell的下方分割线
- (void)addSubview:(UIView *)view{
if (![view isKindOfClass:[NSClassFromString(@"_UITableViewCellSeparatorView") class]] && view){
[super addSubview:view];
}
}
15--Xcode出现The file couldn’t be opened
一般是因为在代码合并时出现冲突,右键showInFinder打开工程蓝色project文件,
然后在右键选择色显示包内容,打开
project.pbxproj
文件 ,command + F查找===
,查找冲突,使用=== 也就是冲突,手动解决后再提交就可以了
16--首次提交代码到git仓库时报错
一般是由于在git上新建项目的时候加了MIT许可证,导致本地与远程冲突,解决办法,强制提交git push -u origin master -f
或者 git pull origin master --allow-unrelated-histories
17--npm start项目启动报错
目前遇到的一次是因为有文件修改了没有提交,用git stash 或者git add后就可以了,其他情况遇到再说
18--布局时tableView向下弹64
如果上下边边界选择的是mas_bottomLayoutGuide
以及mas_topLayoutGuide
,页面出现后就会向下弹64,解决办法是下边界不要直接去以页面为准,可以参考另一个控件配置,比如在tableView下面放一个提交按钮.
原因暂时不明:
-(UITableView *)orderTableView{
if (!_orderTableView) {
_orderTableView = [UITableView new];
[self.view addSubview:_orderTableView];
_orderTableView.delegate = self;
_orderTableView.dataSource = self;
[_orderTableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.mas_topLayoutGuideBottom);
make.width.mas_equalTo(self.view);
make.centerX.mas_equalTo(self.view);
make.bottom.mas_equalTo(self.submitButton.mas_top).with.offset(-10);
}];
}
return _orderTableView;
}
19--SQLITE中exists的用法
一种通俗的可以理解为:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。
20--sqlite 复制表
【复制表结构及数据】
CREATE TABLE NEW_TABLE(新表) AS SELECT * FROM (OLD_TABLE);
【仅仅复制结构,不复制数据】
CREATE TABLE NEW_TABLE AS SELECT * FROM WHERE 1=2;
,跟上面的相比,加了where语句并将条件设为假
21--CKContainer获取iCloud账号返回值不准确
在iOS设备明明有账号登录,返回值却是没有账号登录,原因是设置中iCloud中iCloud Drive没有针对该app打开,导致iCloud不能正常工作
22--直接判断网络是否连接
+ (BOOL)connectedToNetwork
{
// Create zero addy
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
// Recover reachability flags
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
SCNetworkReachabilityFlags flags;
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
if (!didRetrieveFlags)
{
printf("Error. Could not recover network reachability flags\n");
return NO;
}
BOOL isReachable = ((flags & kSCNetworkFlagsReachable) != 0);
BOOL needsConnection = ((flags & kSCNetworkFlagsConnectionRequired) != 0);
return (isReachable && !needsConnection) ? YES : NO;
}
网友评论