iOS 一些常用方法笔记

全局引用:
BOOL state
其他地方:extern BOOL state;
两种特例:
@synthesize id=_id;
@synthesize descriptoin=_description;
_和self的区别:
有setter和getter方法(@property(nomatic ,passion) UIView *view)时,两者堵可以,
当只是属性({   e.g.: UIView *_view  })时,只能”_”

retain 是指针拷贝,copy 是内容拷贝。
通过@synthesize 指令告诉编译器在编译期间产生getter/setter方法。 2:通过@dynamic指令,自己实现方法。
位置请求授权:NSLocationWhenInUseUsageDescription 或 NSLocationAlwaysUsageDescription

1.mrc.arc 混编:
2.mrc下编译环境下使用arc  -fobjc-arc
反之 :-fno-objc-arc
3.init 方法,初始化和shared方法
4.要想在block块内使用局部变量,需要在block外加上”__block 变量名"
5.
1. //获取应用程序沙盒的Documents目录      NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);  
2.     NSString *plistPath1 = [paths objectAtIndex:0]; 
3.      
4.     //得到完整的文件名 
5.     NSString *filename=[plistPath1 stringByAppendingPathComponent:@"test.plist"]; 
6.    //输入写入 
7.     [data writeToFile:filename atomically:YES]; 
8.      
9.     //那怎么证明我的数据写入了呢?读出来看看 
10.     NSMutableDictionary *data1 = [[NSMutableDictionary alloc] initWithContentsOfFile:filename]; 
11.     NSLog(@"%@", data1);    
12.
13.
14. @(20):这表示一个对象
15. 抽象类:用来派生子类
16. #define  如果定义太长 在换行时加“\”
17. frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)
18. 重绘 setNeedsDisplay,调用drawrect, 刷新布局: setNeedsLayout,调用 layoutSubViews,

调用定位时在target里设置两个属性:NSLocationAlwaysUsageDescription  NSLocationWhenInUseUsageDescription
Xcode升级后不支持http访问的解决办法:在Info.plist中添加NSAppTransportSecurity类型Dictionary。
    在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES

1、 发送短信
 // 如果利用该方式发送短信, 当短信发送完毕或者取消之后不会返回应用程序
//        NSURL *url = [NSURL URLWithString:@"sms://10010"];
//        [[UIApplication sharedApplication] openURL:url];
        
        // 判断当前设备能否发送短信
        if (![MFMessageComposeViewController canSendText]) {
            NSLog(@"当前设备不能发送短信");
            return ;
        }
        
        MFMessageComposeViewController *vc = [[MFMessageComposeViewController alloc] init];
        // 设置短信内容
        vc.body = @"吃饭了没?";
        // 设置收件人列表
        vc.recipients = @[@"10010"];
        // 设置代理
        vc.messageComposeDelegate = self;
        // 显示控制器
        [self presentViewController:vc animated:YES completion:nil];

2. 打电话

// 弊端:使用该方法进行拨号之后,当电话挂断之后不会返回应用程序, 会停留在通话记录界面
//        NSURL *url = [NSURL URLWithString:@"tel://13261936021"];
//        [[UIApplication sharedApplication] openURL:url];
        
        // 在拨打电话之后会提示用户是否拨打, 当电话挂断之后会返回应用程序
//        NSURL *url = [NSURL URLWithString:@"telprompt://13261936021"];
//        [[UIApplication sharedApplication] openURL:url];

3. 冒泡排序算法

for (i = 0; i < length - 1; ++i)// 趟次  ?
    {  ?
        for (j = i + 1; j < length; ++j)  ?
        {  ?
            if (arr[i] > arr[j])  ?
            {  ?
                tmp = arr[i];  ?
                arr[i] = arr[j];  ?
                arr[j] = tmp;  ?
            }  ?
        }  ?
    }

4.  图片从中间拉伸
// 左端盖宽度
    NSInteger leftCapWidth = bgImage.size.width * 0.5f;
    // 顶端盖高度
    NSInteger topCapHeight = bgImage.size.height * 0.5f;
    
    bgImage = [bgImage stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:topCapHeight];

5.弹出动画
//出厂动画
- (void)animationWith:(UIView *)view
{
    
    CAKeyframeAnimation* animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
    animation.duration = 0.5;
    
    NSMutableArray *values = [NSMutableArray array];
    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)]];
    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.2, 1.2, 1.0)]];
    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9, 0.9, 1.0)]];
    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]];
    animation.values = values;
    [view.layer addAnimation:animation forKey:nil];
    
    
}

6.经常容易出错的和遗漏的地方
    设置tag值时必须大于100,  tableView 的头尾高度 不能设置为0.。可以是0.001
7.
处理键盘弹出事件, 调整搜索框的高度
  -(void)registNoti{

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shown:) name:UIKeyboardWillShowNotification object:nil];
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardHidden:) name:UIKeyboardWillHideNotification object:nil];

}

// 键盘显示
-(void) shown:(NSNotification*) notification
{
    // keyboardFrame
    CGRect initialFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    
    CGRect convertedFrame = [self.view convertRect:initialFrame fromView:nil];
    
    CGRect tvFrame = self.infoTabaleView.frame ;
    tvFrame.size.height = convertedFrame.origin.y - 60;
    self.infoTabaleView.frame = tvFrame ;
    
}

// 键盘隐藏
-(void) keyboardHidden:(NSNotification*) notification
{
    CGRect tvFrame = self.infoTabaleView.frame;
    tvFrame.size.height = _initialTVHeight;
    self.infoTabaleView.frame = tvFrame;
}

清理缓存
UIAlertView * alert =[ [UIAlertView alloc]initWithTitle:@"提示" message:@"是否删除缓存" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消", nil];
    
    NSString * documentPath =[NSString stringWithFormat:@"%@/Documents",NSHomeDirectory()];
    NSLog(@"%@",documentPath);
    BOOL isDataExist=[[NSFileManager defaultManager]fileExistsAtPath:documentPath];
    NSLog(@"~~~~~~~%d",isDataExist);
    if (isDataExist)
    {
        long long content=[[[NSFileManager defaultManager]attributesOfItemAtPath:documentPath error:nil]fileSize];
        float size=content/1024.0;
        NSString * content2 = [NSString stringWithFormat:@"%.2fMB",size];
        alert.message = [@"是否删除缓存" stringByAppendingString:content2];
        [ [NSFileManager defaultManager]removeItemAtPath:documentPath error:nil];
        [alert show] ;
    }
    else
    {
        alert.message = @"暂无缓存";
        [alert show];
    }

图片裁剪: 比如星际显示的时候:
 starImageView.contentMode=UIViewContentModeLeft;
    //设置剪裁
    starImageView.clipsToBounds=YES;
    float x=65/5.0*num;
    starImageView.frame=CGRectMake(0, 0, x, 23);

判断版本号:
 NSString *key = @"CFBundleVersion";
    
    // 取出沙盒中存储的上次使用软件的版本号
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *lastVersion = [defaults stringForKey:key];
    
    // 获得当前软件的版本号
    NSString *currentVersion = [NSBundle mainBundle].infoDictionary[key];
    
    if ([currentVersion isEqualToString:lastVersion]) {
        // 显示状态栏
      
    } else { // 新版本
        [defaults setObject:currentVersion forKey:key];
        [defaults synchronize];
    }

根据颜色得到图片
- (UIImage *)imageWithColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);
    
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return image;
}
// 得当前View上的图片
+ (UIImage *)captureImageWithView:(UIView *)view
{
    // 1.创建bitmap上下文
    UIGraphicsBeginImageContext(view.frame.size);
    // 2.将要保存的view的layer绘制到bitmap上下文中
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    // 3.取出绘制号的图片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    return newImage;
}

1.修改复制粘贴显示英文
/*
 如何修改系统语言显示英文(复制,粘贴)
 解决办法是用vim直接打开工程的Info.plist文件,在文件中增加如下内容即可
 <key>CFBundleLocalizations</key>
 <array>
        <string>zh_CN</string>
        <string>en</string>
 </array>
 
 */
另一种方式:修改Info.plist文件的Localization native development region属性值为China
2.图片压缩
 + (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize
  {
  // Create a graphics image context
  UIGraphicsBeginImageContext(newSize);
  // Tell the old image to draw in this new context, with the desired
  // new size
  [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
  // Get the new image from the context
  UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
  // End the context
  UIGraphicsEndImageContext();
  // Return the new image.
  return newImage;
  }
3.javascript
    //<1>获取当前页面的url
    NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"document.location.href"];
    NSLog(@"currentURL = %@",currentURL);
    
    //<2>获取当前界面的title
    NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
    NSLog(@"title = %@",title);

4.  程序启动时每次收到推送 或 程序未启动通过推送消息启动程序时,都将会触发appdelegate里面的方法(注意要跟服务器的证书一直,比如开发环境,服务器也要用开发证书的pem才行):
- ( void )application:( UIApplication *)application didReceiveRemoteNotification:( NSDictionary *)userInfo
{
//////////这里是收到推送后的逻辑代码
// 需要  #import <AudioToolbox/AudioToolbox.h>
AudioServicesPlaySystemSound (1007); //系统的通知声音
AudioServicesPlayAlertSound ( kSystemSoundID_Vibrate );//震动
//自定义声音
NSString *path = [[ NSBundle mainBundle ] pathForResource : @"message" ofType : @"wav" ];
// 组装并播放音效
SystemSoundID soundID;
NSURL *filePath = [ NSURL fileURLWithPath :path isDirectory : NO ];
AudioServicesCreateSystemSoundID (( __bridge CFURLRef )filePath, &soundID);
AudioServicesPlaySystemSound (soundID);
// 声音停止
AudioServicesDisposeSystemSoundID (soundID);
}
*         userInfo默认包含以下内容:
aps =  {
alert = "";//推送显示的问题信息在这里
badge = 0;//app的icon右上角的推送数字 在这里设置
sound = "";
};
*         如果需要添加自定义的字段,就让服务器的小伙伴们 跟aps同一层级添加一个数组(以Json为例):
{
"aps" : { "alert" : "This is the alert text", "badge" : 1, "sound" : "default" },
"server" : { "serverId" : 1, "name" : "Server name")
}
这样收到的
userInfo里面会多一个server的字段。

时间: 2024-11-05 22:44:23

iOS 一些常用方法笔记的相关文章

IOS开发学习笔记-(2)键盘控制,键盘类型设置,alert 对话框

一.关闭键盘,放弃第一响应者,处理思路有两种 ① 使用文本框的 Did End on Exit 绑定事件 ② UIControl on Touch 事件 都去操作 sender 的  resignFirstResponder #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *txtUserName; @pro

iOS开发学习笔记:基础篇

iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境),Xcode是一个集成开发环境,包括了编辑器.调试.模拟器等等一系列方便开发和部署的工具,iOS SDK则是开发应用所必需,不同的SDK分别对应不同的iOS版本或设备,通常我们需要下载多个iOS SDK以确保我们开发的程序能够在不同版本的iOS上正常运行. 创建新工程 Xcode提供了很多种工程模

IOS开发学习笔记-(3) 进度条、等待动画开始停止

一.创建对应空间视图  ,如下图: 二.编写对应的 .h 代码,如下 : #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activWaitNetWork; @property (weak, nonatomic) IBOutlet UIProgressView *pgrsDownLo

IOS开发复习笔记(3)-ARC

1.ARC 当你自己调用了release或retain语句的时候,ARC有效时编译文件会遇到错误,你可以通过-fno-objc-arc和-fobjc-arc两个编译器标志在混搭中支持ARC和非ARC的代码 如下面编译支持ARC,而文件代码不支持ARC # if !__has_feature(objc_arc) //this code do not support to ARC -(void) release{ //release your var } #endif 在ARC工程中集成非ARC的第

IOS开发学习笔记(二)-语音识别(科大讯飞)

上次简单地讲解了如何利用科大讯飞完成语音合成,今天接着也把语音识别整理一下.当然,写代码前我们需要做的一些工作(如申请appid.导库),在上一篇语音合成的文章当中已经说过了,不了解的可以看看我上次的博文,那么这次直接从堆代码开始吧. 详细步骤: 1.导完类库之后,在工程里添加好用的头文件.在视图里只用了一个UITextField显示识别的内容,两个UIButton(一个开始监听语音,一个结束监听),然后引入类.添加代理,和语音合成的一样. MainViewController.h 1 #imp

IOS学习之斯坦福大学IOS开发课程笔记(第六课)

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/28398697 作者:小马 这节课主要讲述多个MVC是如何协同工作的.到目前为止,所有的课程都只是涉及到一个视图.从这节课开始,将会持到多视图应用的例子. 多视图开发这里用navigationController举例子.这个也是比较常用的.如上图所示,一个 navigation Controller(MVC)会指向一个rootViewController(另一个MVC),这个是第一

IOS开发复习笔记(4)-TableView

总结几个TableView常用的代码 初始化方面 static string CellIndetifier="cellIndetifier"; -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1;//表中段数 } -(NSInterger)tableView:(UITableVIew *)tableView numberOfRowsInSection:(NSInteger)section{

IOS逆向分析笔记——replay逆向分析

正常找出视频或者图片处理文件的GL脚本就是找出脚本加载的函数glshadersource断下就好了,上周在分析replay的时候很奇怪IDA没有找到glshadersource这个函数,于是我在反汇编窗口里搜索glshadersource,找到了很多用到它的相关函数,于是一一尝试没有一个能断下,想到图像处理一定要调用GL脚本,于是搜索GLSL找到相关函数还是没有一个能断下,于是又所有打开文件的函数依然没有断下 于是茫然了,试了很多方法,搜索了视频相关的函数,找到捕捉输出的缓冲区样本函数didou

IOS开发学习笔记(1)-----UILabel 详解

1. [代码][C/C++]代码     //创建uilabelUILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 280, 80)];//设置背景色label1.backgroundColor = [UIColor grayColor];//设置taglabel1.tag = 91;//设置标签文本label1.text = @"Hello world!";//设置标签文本字体和字体大小label1.