博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS开发基础知识--碎片27
阅读量:5958 次
发布时间:2019-06-19

本文共 5437 字,大约阅读时间需要 18 分钟。

1:iOS中的round/ceil/floorf

extern float ceilf(float);extern double ceil(double);extern long double ceill(long double);extern float floorf(float);extern double floor(double);extern long double floorl(longdouble);extern float roundf(float);extern double round(double);extern long double roundl(longdouble);round:如果参数是小数,则求本身的四舍五入。ceil:如果参数是小数,则求最小的整数但不小于本身.floor:如果参数是小数,则求最大的整数但不大于本身. Example:如何值是3.4的话,则3.4 -- round 3.000000    -- ceil 4.000000    -- floor 3.00000

 

2:对数组进行转换,把原来二个值转化成一条的记录(满足左右排版布局)

NSMutableArray *mnewArray=[[NSMutableArray alloc]init];    NSArray *nameArray=@[@"1",@"2",@"3",@"4",@"5",@"6"];    int allCount=0;    if (nameArray.count%2==1) {        //说明是奇数        allCount=nameArray.count;    }    else    {        allCount=nameArray.count-1;    }    for (int i=0; i

 

3:APP拨打电话完又跳回到APP里,并监听它的状态

#import "ViewController.h"#import 
#import
@interface ViewController ()
@property(strong,nonatomic)UIWebView *phoneCallWebView;//电话监听@property (nonatomic, strong) CTCallCenter * center;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; }- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning];}- (IBAction)sdfsdfsdfs:(id)sender { [self directCall]; //监听电话 __weak typeof(self) weakSelf = self; self.center = [[CTCallCenter alloc] init]; self.center.callEventHandler = ^(CTCall* call) { if ([call.callState isEqualToString:CTCallStateDisconnected]) { NSLog(@"Call has been disconnected"); } else if ([call.callState isEqualToString:CTCallStateConnected]) { NSLog(@"Call has just been connected"); } else if([call.callState isEqualToString:CTCallStateIncoming]) { NSLog(@"Call is incoming"); } else if ([call.callState isEqualToString:CTCallStateDialing]) { //监听再进入APP时弹出窗 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"AlertViewTest" message:@"message" delegate:weakSelf cancelButtonTitle:@"Cancel" otherButtonTitles:@"OtherBtn",nil]; [alert show]; NSLog(@"call is dialing"); } else { NSLog(@"Nothing is done"); } };}//打电话 结束完自动跳回APP-(void)directCall{ NSString *PhoneNum=@"10086"; NSURL *phoneURL=[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",PhoneNum]]; if (!self.phoneCallWebView) { self.phoneCallWebView=[[UIWebView alloc]initWithFrame:CGRectZero]; } [self.phoneCallWebView loadRequest:[NSURLRequest requestWithURL:phoneURL]];}@end

注意:监听电话要引入CoreTelephony.framework,跳转回APP则是通过一个UIWebView实现

 

4:UIView的layoutSubviews和drawRect方法何时调用

首先两个方法都是异步执行。layoutSubviews方便数据计算,drawRect方便视图重绘。

layoutSubviews在以下情况下会被调用:

1、init初始化不会触发layoutSubviews。

2、addSubview会触发layoutSubviews。
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化。
4、滚动一个UIScrollView会触发layoutSubviews。
5、旋转Screen会触发父UIView上的layoutSubviews事件。
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
7、直接调用setLayoutSubviews。
 
drawRect在以下情况下会被调用:

1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。drawRect 掉用是在Controller->loadView, Controller->viewDidLoad 两方法之后掉用的.所以不用担心在 控制器中,这些View的drawRect就开始画了.这样可以在控制器中设置一些值给View(如果这些View draw的时候需要用到某些变量 值).

2、该方法在调用sizeToFit后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法。
3、通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。
4、直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0。
以上1,2推荐;而3,4不提倡
 
drawRect方法使用注意点:

 

1、 若使用UIView绘图,只能在drawRect:方法中获取相应的contextRef并绘图。如果在其他方法中获取将获取到一个invalidate 的ref并且不能用于画图。drawRect:方法不能手动显示调用,必须通过调用setNeedsDisplay 或 者 setNeedsDisplayInRect,让系统自动调该方法。
2、若使用calayer绘图,只能在drawInContext: 中(类似鱼drawRect)绘制,或者在delegate中的相应方法绘制。同样也是调用setNeedDisplay等间接调用以上方法
3、若要实时画图,不能使用gestureRecognizer,只能使用touchbegan等方法来掉用setNeedsDisplay实时刷新屏幕
 
5:UIView中的坐标转换(convertPoint,convertRect)
// 将像素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];

 6:设置谷歌地图ZOOM等级的几种方式

GMSCameraPosition *cameraPosition = [GMSCameraPosition cameraWithLatitude:latitude                                                                longitude:longitude                                                                     zoom:11.0];[self.mapView animateToCameraPosition:cameraPosition];orGMSCameraUpdate *update = [GMSCameraUpdate zoomTo:11.0];[self.mapView animateWithCameraUpdate:update];or[self.mapView animateToZoom:11.0];

 

转载地址:http://gjexx.baihongyu.com/

你可能感兴趣的文章
CollectionView水平和竖直瀑布流的实现
查看>>
前端知识复习一(css)
查看>>
spark集群启动步骤及web ui查看
查看>>
利用WCF改进文件流传输的三种方式
查看>>
Spring学习总结(2)——Spring的常用注解
查看>>
关于IT行业人员吃的都是青春饭?[透彻讲解]
查看>>
钱到用时方恨少(随记)
查看>>
mybatis主键返回的实现
查看>>
org.openqa.selenium.StaleElementReferenceException
查看>>
数论之 莫比乌斯函数
查看>>
linux下查找某个文件位置的方法
查看>>
python之MySQL学习——数据操作
查看>>
Harmonic Number (II)
查看>>
长连接、短连接、长轮询和WebSocket
查看>>
day30 模拟ssh远程执行命令
查看>>
做错的题目——给Array附加属性
查看>>
Url.Action取消字符转义
查看>>
JQuery选择器大全
查看>>
HBase 笔记3
查看>>
java中通过绝对路径将图片存入数据库
查看>>