iOS 项目常用效果方法注意点集锦

真是求知若渴,遇到好的技术就是想分享出来,虽然不是我原创,但是我还是想要以我微薄之力与大家分享。
碰到好的东西,我不怕分享给别人,就算是学完了之后别人比我更强,其实真正的对手往往不是别人,而是自己,我不怕万人阻挡,只怕自己投降。
希望自己越来越棒,成为一个优秀的人,不辜负父母予我身体发肤,抚养我长大。
原文地址:简书地址 | 博客地址

 

就算是做个笔记,我也要认真的记下来!

 

1.根据汉字字符串获取该字符串的拼音然后取得首字母(这个我之前写过博文)

<span style="font-size:18px;">分享资源    汉字转换为 拼音 获取首字母
//获取拼音首字母(传入汉字字符串, 返回大写拼音首字母)
/*
- (NSString *)firstCharactor:(NSString *)aString
{
    //转成了可变字符串
    NSMutableString *str = [NSMutableString stringWithString:aString];
    //先转换为带声调的拼音
    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);
    //再转换为不带声调的拼音
    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);
    //转化为大写拼音
    NSString *pinYin = [str capitalizedString];
    //获取并返回首字母
    return [pinYin substringToIndex:1];
}
*/
        NSString *string = @"简书" ;
        if ([string length])
        {
            NSMutableString *mutableString = [NSMutableString stringWithString:string] ;
            /**
             *  由于此方法是在coreFoundation框架下,咱们平时所使用的类型都是Foundation框架下的,所以需要转换类型.
             *
             *  @param string#>    string 所需要转换的原字符#>
             *  @param range#>     range 所需要转换字符的范围.如果为0或者是NULL意思是所有字符都转换#>
             *  @param transform#> transform 转换方式#>
             *  @param reverse#>   reverse 如果为YES,返回原字符串;如果为NO,返回转换之后的字符串#>
             *
             *  @return return value description
             */
            // 将所有非英文的字符转换为拉丁字母,并且带声调和重音标识
            // __bridge :只改变当前对象的类型,但是不改变对象内存的管理权限
            CFStringTransform((__bridge CFMutableStringRef)mutableString , 0,kCFStringTransformToLatin , NO) ;

            // 去掉声调
            CFStringTransform((__bridge CFMutableStringRef)mutableString , 0,kCFStringTransformStripDiacritics , NO) ;

            // 每个单词的首字母大写 后再截取字符串
            NSString *str = [[mutableString capitalizedString] substringToIndex:1];
        }</span>


2.根据UILabel里的内容自适应高度(xib中由我自己添加)

NSString *contentString = [dic objectForKey:@"content"] ; //从字典中提取字符串
CGRect rect = [contentString boundingRectWithSize:CGSizeMake(tableView.bounds.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName :[UIFont systemFontOfSize:15]} context:nil] ;
    // 内容的自适应高度方法
     *  @param CGSize 规定文本显示的最大范围
        @param options 按照何种设置来计算范围
        @param attributes 文本内容的一些属性,例如字体大小,字体类型等  (字体不一样,高度也不一样)
        @parma context 上下文 可以规定一些其他的设置 但是一般都是nil
     */    
    // 枚举值中的 " | "  意思是要满足所有的枚举值设置.

xib中的代码,请活学活用~

self.tableView.rowHeight = UITableViewAutomaticDimension;
    self.tableView.estimatedRowHeight = 150;


3. 把图片做成圆形图标(非常常用)

self.headIconImageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 40, 40)] ;
self.headIconImageView.layer.cornerRadius = 20 ; // 设置半径 
self.headIconImageView.layer.masksToBounds = YES ; // 边界是否允许截取

 

4. NSTimer计时器

使用实例代码如下:

// 第一个参数:多长时间会触发一次,以秒为单位
// 第二个参数:如果看到函数的参数有target,一般情况下,都用self
// 第三个参数:SEL,需要调用其他的方法,就是每次时钟被触发的时候,去执行的方法
// 最多可以带一个参数,就是时钟本身
// 第四个参数,暂时不用考虑,设置成nil
// 第五个参数:是否重复,通常会设置YES

_gameTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];

 

a.在时钟触发方法中,可以使用sender.fireDate获取到时钟被触发的时间
b.注意:使用NSTimer的时候,千万不要忘记调用invalidate方法关闭时钟。
c.NSTimer可能不会是及时相应触发时间的,它的执行优先级相对较低,因此,不要使用NSTimer去做实时响应需求较高的周期性操作。

5.NSNumber

 

a.是数字的NS对象的表达形式,如果要把数字添加到数组或者字典中,必须要进行转换,同时要使用数组中的数字,还需要转换成对应的数字。
b.要转换数字可以使用OC提供的包装方法:@(int)
c.要把NSNumber转换成字符串,需要使用stringValue方法

6.取消图片的渲染

[button setImage:[[UIImage imageNamed:@"1.jpg" ] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]  forState:UIControlStateNormal] ;

7.单例+方法锁

static Singleton *singleton = nil ;

+ (Singleton *)defaultSingleton
{
    // 方法锁,作用为:当多个线程同时调用方法的时候,保证只有一个线程在使用该方法.例如:A和B同时调用defaultSingleton方法,如果A正在使用该方法,那么B就不能调用,直到A使用完成,B才会执行该方法.这个也保证单例对象的唯一性,避免初始化方法被同时多次执行.
    @synchronized(self)
    {
        if (singleton == nil)
        {
            singleton = [[Singleton alloc] init] ;
        }
}
        return singleton ;
}

 

8.隐藏状态栏 修改状态栏风格

-(UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent;  // 暗背景色时使用
} 

- (BOOL)prefersStatusBarHidden 
{ 
    return YES; // 是否隐藏状态栏
}

9.UITableViewCell可移动,需要打开的代理方法以及移动过程中调用的代理方法

// tableView可移动  移动完成之后会调用此代理方法
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{

}

// 移动过程中调用的代理方法 -- 示例为不能跨区移动
/**
 *  <#Description#>
 *
 *  @param tableView
 *  @param sourceIndexPath              所要移动单元格的原始位置
 *  @param proposedDestinationIndexPath 将要移动到的位置
 *
 *  @return return value description
 */
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
    // 移动位置在同一分区
    if (sourceIndexPath.section == proposedDestinationIndexPath.section)
    {
        // 这时允许单元格移动
        return proposedDestinationIndexPath ;
    }
    // 不在同一分区 不让单元格移动,返回原始的indexPath
    else
    {
        return sourceIndexPath ;
    }
}

 

10.UIImage与字符串互转

//图片转字符串  
-(NSString *)UIImageToBase64Str:(UIImage *) image  
{  
    NSData *data = UIImageJPEGRepresentation(image, 1.0f);  
    NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];  
    return encodedImageStr;  
}

//字符串转图片  
-(UIImage *)Base64StrToUIImage:(NSString *)_encodedImageStr  
{  
    NSData *_decodedImageData   = [[NSData alloc] initWithBase64Encoding:_encodedImageStr];  
    UIImage *_decodedImage      = [UIImage imageWithData:_decodedImageData];  
    return _decodedImage;  
}

 

11.当有多个导航控制器时,一次设置多个导航控制器

UINavigationBar *navBar = [UINavigationBar appearance] ;
    // 所有导航条颜色都会改变 -- 一键设置
    //navBar.barTintColor = [UIColor yellowColor] ;
    [navBar setBackgroundImage:[UIImage imageNamed:@"bg_nav.png"] forBarMetrics:UIBarMetricsDefault] ;

 

12.通过2D仿射函数实现小的动画效果(变大缩小) --可用于自定义pageControl中.

 

       [UIView animateWithDuration:0.3 anim
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值