开发笔记

iOS开发技巧汇总
本文汇总了多种iOS开发实用技巧,包括日期比较、图片格式识别、xib控件尺寸调整、圆形图片设置等,并介绍了如何利用AVSpeechSynthesizer实现文本转语音及自定义返回按钮的方法。

1.判断时间

-(NSString *)compareDate:(NSString*)dateString
{
    NSTimeInterval seconds=24*60*60;
    NSDate *today=[NSDate date];
    NSDate *yesterday=[today dateByAddingTimeInterval:-seconds];
    NSString *todayStr=[[today description]substringToIndex:10];
    NSString *yesterdayStr=[[yesterday description]substringToIndex:10];
    NSString *dateStr=[dateString substringToIndex:10];
    if ([dateStr isEqualToString:todayStr]) {
        return @"今天";
    }else if ([dateStr isEqualToString:yesterdayStr]){
        return @"昨天";
    }else{
        return dateStr;
    }
}

2.通过图片Data数据第一个字节 来获取图片扩展名

- (NSString *)contentTypeForImageData:(NSData *)data {    

         uint8_t c;
         [data getBytes:&c length:1];    

    switch (c) {        case 0xFF:            return @"jpeg";        case 0x89:            return @"png";    
        case 0x47:            return @"gif";       
        case 0x49:  
        case 0x4D:            return @"tiff";       
        case 0x52: 
        if ([data length] < 12) {                return nil;   }
         NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];            if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) { return @"webp";   }           return nil;
    }    return nil;
}

3.xib控件尺寸显示不正确

(1) 如果在xib中有一个控件, 已经明确设置尺寸了,输出的frame也是对的, 但是显示出来的效果不一样(比如尺寸变大了), 如果是这种情况一般就是autoresizingMask自动伸缩属性在搞鬼! 解决办法如下:
//xib的awakeFromNib方法中设置UIViewAutoresizingNone进行清空
  - (void)awakeFromNib 

{    self.autoresizingMask = UIViewAutoresizingNone;
}
(2)如果你的控制器的view是用xib创建的, 当你拿到view的尺寸是不准确的, 在这里我们就需要通过[UIScreen mainScreen].bounds拿到尺寸, 但是storyboard的尺寸是准确的!

(3)xib中控件尺寸修改建议大家以后在viewDidLayoutSubviews计算尺寸
- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    //在这里计算尺寸
}

4.设置圆形图片

- (UIImage *)cutCircleImage {    UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);   

     // 获取上下文
    CGContextRef ctr = UIGraphicsGetCurrentContext();    // 设置圆形
    CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);    CGContextAddEllipseInRect(ctr, rect);    // 裁剪
    CGContextClip(ctr);    // 将图片画上去
    [self drawInRect:rect];    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return image;
}

5.## 与 @# 在宏里面的使用
##是连接的作用, 即当使用上面的宏会把weak与输入的type值连接起来
#define LRWeakSelf(type)  __weak typeof(type) weak##type = type;

#的意思是紧跟着它的后面的标识符添加一个双引号""

也就是说@#可以代替@"" 那么我们以后开发就省事了, 不用再添加@""了!
 #define LRToast(str) [NSString stringWithFormat:@"%@",@#str]

6.iOS中的AVSpeechSynthesizer可以很轻松的实现实现文本到语音的功能,基本代码如下:
self.speechSynthesizer = [[AVSpeechSynthesizer alloc] init];
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@"FlyElephant"];

AVSpeechSynthesisVoice *voiceType = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
utterance.voice = voiceType;
//设置语速
utterance.rate *= 0.5;
//设置音量
utterance.volume = 0.6;

[self.speechSynthesizer speakUtterance:utterance];
AVSpeechUtterance可以设置对应的语言,如果设置的语言不能识别文本不能生成语音播放,苹果支持的语言如下:
* Arabic (ar-SA)
* Chinese (zh-CN, zh-HK, zh-TW)
* Czech (cs-CZ)
* Danish (da-DK)
* Dutch (nl-BE, nl-NL)
* English (en-AU, en-GB, en-IE, en-US, en-ZA)
* Finnish (fi-FI)
* French (fr-CA, fr-FR)
* German (de-DE)
* Greek (el-GR)
* Hebrew (he-IL)
* Hindi (hi-IN)
* Hungarian (hu-HU)
* Indonesian (id-ID)
* Italian (it-IT)
* Japanese (ja-JP)
* Korean (ko-KR)
* Norwegian (no-NO)
* Polish (pl-PL)
* Portuguese (pt-BR, pt-PT)
* Romanian (ro-RO)
* Russian (ru-RU)
* Slovak (sk-SK)
* Spanish (es-ES, es-MX)
* Swedish (sv-SE)
* Thai (th-TH)
* Turkish (tr-TR)
以上就是苹果支持的语言编码,当然你也可以通过speechVoices遍历对应的语言编码:
NSArray *voice = [AVSpeechSynthesisVoice speechVoices];
    for (AVSpeechSynthesisVoice *voiceModel in voice) {
        NSLog(@"FlyElephant-%@",voiceModel);
    }

6.播放系统声音

#import <AVFoundation/AVFoundation.h>

AudioServicesPlaySystemSound(soundID);

7.自定义了一个返回按钮.这样系统默认的滑动返回手势效果就没有了的解决方法

我们可以B控制器中这样做.
遵守 <UIGestureRecognizerDelegate>代理
 -(void)addGesture
{
    self.navigationController.interactivePopGestureRecognizer.delegate =(id)self;
    self.navigationController.interactivePopGestureRecognizer.enabled = YES;
    self.currentShowVC = self;
 
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    return YES;
}

8.//不可变字符串的语法糖
NSString *string = @"hanjunqiang";
//可变字符串的语法糖
NSMutableString *mString = @"大爱中华".mutableCopy;//后缀不能丢

9.导航栏去除黑线

[self.navigationController.navigationBarsetBackgroundImage[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
10.tableview去除无数据时多余的cell显示

tableView.tableFooterView=[[UIView alloc]initWithFrame:CGRectZero];

11.判断从哪个界面推过来的

if ([[self.parentViewController class] isEqual:NSClassFromString(@"XXViewController")] )

12.常用的宏定义

#define WS(weakSelf) __weak __typeof(&*self)weakSelf = self;

#define ColorWithRGB(r,g,b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0]

#defineRandomColor[UIColorcolorWithRed:arc4random()%255/255.0green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1.0]

#define KScreenWidth [[UIScreen mainScreen] bounds].size.width
#define KScreenHeight [[UIScreen mainScreen] bounds].size.height

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/2330410/blog/988677

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值