1、UIView 边框效果
CALayer *layer = [_myImageView layer];
2、UIView的阴影效果
layer.shadowOpacity = 0.8; //透明度
3、Block使用中的一些疑问解答
http://www.cocoachina.com/ios/20120514/4247.html
1. int number = 1;
_block = ^(){
NSLog(@"number %d", number);
};
number = 2;
_block(); 会把number当成常量变量编码到block中,使用__block进行修饰,
2. block在创建的时候,它的内存是分配在栈(stack)上,而不是在堆(heap)上;
它本身的作用域是创建的时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。
解决这个问题的方法就是在创建完block的时候需要调用copy的方法。copy会把block从栈上移动到堆上,那么就可以在其他 地方使用这个block
3. 在block中使用self的时候,使用__block ViewController *controller = self; 修改,
4、获取文件夹的大小:
http://blog.sina.com.cn/s/blog_6d01cce30101hbk7.html
通常用于删除缓存的时,计算缓存大小
//单个文件的大小
-(long long) fileSizeAtPath:(NSString*) filePath{
NSFileManager* manager =[NSFileManager defaultManager];
if ([managerfileExistsAtPath:filePath]){
return [[manager attributesOfItemAtPath:filePatherror:nil] fileSize];
}
return 0;
}
//遍历文件夹获得文件夹大小,返回多少M
-(float ) folderSizeAtPath:(NSString*) folderPath{
NSFileManager* manager =[NSFileManager defaultManager];
if (![managerfileExistsAtPath:folderPath]) return 0;
NSEnumerator*childFilesEnumerator = [[manager subpathsAtPath:folderPath]objectEnumerator];
NSString* fileName;
long long folderSize = 0;
while ((fileName =[childFilesEnumerator nextObject]) != nil){
NSString* fileAbsolutePath = [folderPathstringByAppendingPathComponent:fileName];
folderSize += [selffileSizeAtPath:fileAbsolutePath];
}
returnfolderSize/(1024.0*1024.0);
}
5、#pragma mark - 限制输入的汉字个数
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:) name:@"UITextFieldTextDidChangeNotification" object:nil];
-(void)textFiledEditChanged:(NSNotification *)obj{
UITextField *textField = (UITextField *)obj.object;
NSString *toBeString = textField.text;
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式
if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textField markedTextRange];
//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
if (toBeString.length > ReviewNumber) {
textField.text = [toBeString substringToIndex:ReviewNumber];
}
}
// 有高亮选择的字符串,则暂不对文字进行统计和限制
else{
}
}
// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
else{
if (toBeString.length > ReviewNumber) {
textField.text = [toBeString substringToIndex:ReviewNumber];
}
}
}
//限制输入多少个字符
if ([toBeString lengthOfBytesUsingEncoding:NSUTF8StringEncoding] > ReviewNumber) {
[OMGToast showWithText:[NSString stringWithFormat:@"最多输入%ld个字符", (long)ReviewNumber]];
for (int i = ((int)toBeString.length - 1); i > 0; i--) {
NSString *str = [toBeString substringToIndex:i];
if ([str lengthOfBytesUsingEncoding:NSUTF8StringEncoding] <= ReviewNumber) {
textField.text = str;
break;
}
}
}
6、判断一个对象是什么对象类型
-(void) onResp:(BaseResp*)resp
if([resp isKindOfClass:[SendMessageToWXResp class]])
nsstring * className = @“seenMessageView"
Class class = NSClassFromString(className);
7、直接跳到 设置里面的定位授权页
if (IsiOS8Later) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
8、改变UITableView的header、footer背景颜色,这是个很常见的问题。之前知道的一般做法是,通过实现
tableView: viewForHeaderInSection:
返回一个自定义的View,里面什么都不填,只设背景颜色。但是今天发现一个更简洁的做法对于iOS 6及以后的系统,实现这个新的delegate函数即可:
- (void)tableView:(UITableView *)tableView willDisplayFooterView:(UIView *)view forSection:(NSInteger)section {
view.tintColor = [UIColor clearColor];
}
还可以改变文字的颜色:
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
UITableViewHeaderFooterView *footer = (UITableViewHeaderFooterView *)view;
[footer.textLabelsetFont:[UIFontsystemFontOfSize:14.0]];
}
9、定时器
// 拿到外界传来的时间戳
- (void)setTimestamp:(NSInteger)timestamp{
_timestamp = timestamp;
if (_timestamp !=0) {
timer =[NSTimerscheduledTimerWithTimeInterval:1target:selfselector:@selector(timer:)userInfo:nilrepeats:YES];
}
}
-(void)timer:(NSTimer*)timerr{
_timestamp--;
[selfgetDetailTimeWithTimestamp:_timestamp];
if (_timestamp ==0) {
[timerinvalidate];
timer =nil;
// 执行block回调
self.timerStopBlock();
}
}
- (void)getDetailTimeWithTimestamp:(NSInteger)timestamp{
NSInteger ms = timestamp; //秒
NSInteger ss =1;
NSInteger mi = ss *60;
NSInteger hh = mi *60;
NSInteger dd = hh *24;
// 剩余的
NSInteger day = ms / dd;//天
NSInteger hour = (ms - day * dd) / hh;//时
NSInteger minute = (ms - day * dd - hour * hh) / mi;//分
NSInteger second = (ms - day * dd - hour * hh - minute * mi) / ss;//秒
// NSLog(@"%zd日:%zd时:%zd分:%zd秒",day,hour,minute,second);
}10、使用lipo合并.framework 文件
lipo -create /Users/huobanbengkui/Desktop/Release-iphoneos/PlayableAdsSDK.framework/PlayableAdsSDK /Users/huobanbengkui/Desktop/Release-iphonesimulator/PlayableAdsSDK.framework/PlayableAdsSDK -output /Users/huobanbengkui/Desktop/PlayableAdsSDK
最后是替换,替换(注意坑)
11、取消延迟执行的方法
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(isSignIn) object:nil];
[self performSelector:@selector(isSignIn) withObject:nil afterDelay:1.0];
12、swift 国际化:
1:应用名称国际化,必须使用InfoPlist.strings 这样的文件名,系统使用的查找
2:内容国际化,必须使用Localizable.strings 这样的文件名,系统查找
3: 设置语言,然后强制更新
let path = Bundle.main.path(forResource: "en", ofType: "lproj");
let bundel = Bundle(path: path!);
let str = NSLocalizedString("click", tableName: nil, bundle: bundel!, value: "default", comment: "default");
13、获取图片的GPS信息
- //获取图片的NSURL 来源于AssetsLibrary.framework #import <AssetsLibrary/AssetsLibrary.h>
- NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL];
- //ALAssetsLibrary 获取图片和视频
- ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init];
- //根据url获取指定的图片 如果获取到了资源执行resultBlock,否则执行failureBlock
- //ALAsset实例 代表一个图片或者视频
- [library assetForURL:url resultBlock:^(ALAsset *asset){
- //defaultRepresentation 获取资源文件的默认属性
- //metadata 获取数据的数据,就是在默认属性中的数据,称之为元数据
- NSDictionary *imageData = [[NSMutableDictionary alloc]initWithDictionary:asset.defaultRepresentation.metadata];
- //kCGImagePropertyGPSDictionary 关于GPS的字典数据 来源于ImageIO.framework #import <ImageIO/ImageIO.h>
- NSDictionary *gpsData = [imageData objectForKey:(NSString *)kCGImagePropertyGPSDictionary];
- //打印纬度
- NSLog(@"%@",[gpsData objectForKey:@"Altitude"]);
- }failureBlock:^(NSError *error){
- NSLog(@"error:%@",error);
- }];