写一下今天的收获吧,如:截取屏幕图片并保存,单击“空白返回上一页”,一点关于布局的小心得

截图并保存

很显然,你要先截到自己想要的区域的图再谈保存的事,截图其实很简单:

- (IBAction)savePictureBtn_action:(id)sender {

//self.viewContentV    就是我要截取的内容所在  
  UIGraphicsBeginImageContextWithOptions(self.viewContentV.bounds.size,YES,0);
    [self.viewContentV drawViewHierarchyInRect:self.viewContentV.bounds afterScreenUpdates:YES];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

//这样再截一次就成了截图片的那么一点了。。。
    UIImage *saveIm = [UIImage imageWithCGImage:CGImageCreateWithImageInRect([image CGImage], self.viewContentV.frame)];

//直接保存到相册,但是需要先检查下你的plist里是否获取了相册访问权限
//不然会崩的(10以后)
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), (__bridge void * _Nullable)(self));

}
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{

    NSLog(@"image = %@, error = %@, contextInfo = %@", image, error, contextInfo);
}

一些常用的权限获取:
如今苹果版粑粑审核愈加严格,获取任何权限都要说清楚将用来做什么,会不会泄漏用户隐私。切记要描述清楚,不然会被拒的

NSBluetoothPeripheralUsageDescription

“xxxx”需要获取您的蓝牙信息

NSCalendarsUsageDescription

“xxxx”需要获取您的日历权限

NSCameraUsageDescription

“xxxx”需要获取您的相机权限

NSContactsUsageDescription

“xxxx”需要获取您的联系人权限

NSLocationWhenInUseUsageDescription

“xxxx”需要获取您的位置信息

NSMicrophoneUsageDescription

“xxxx”需要获取您的麦克风权限

NSMotionUsageDescription

“xxxx”需要获取您的运动数据

NSPhotoLibraryUsageDescription

“xxxx”需要获取您的相册权限

两种添加方式就不细说了吧。。。

其实,对于这个方法

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

}

我是特别喜欢用的,但是有时候他就太勤快了,让人有些不爽。
比如这样一个页面:
类似结账单的这样一个页面
除了中间小部分是table会拦截事件,哪怕点在total order#这样的lable上也会响应这个勤快的方法。然后这就影响了体验,而且怪怪的。

所以呢,咱就自己拦截不应该到最下层View的touch(关于手势的响应者链,请自行找度娘吧)
所以就有了我下面的这个玩法

//这两个单击手势的事件主是解决点击空白返回页面
//有些没事件拦截的地方,就被认为了“空白”。。。
- (IBAction)tapContenView_action:(id)sender {

}
- (IBAction)disMissTap_action:(id)sender {
    [self dismissViewControllerAnimated:YES completion:^{}];
}

最后说下这个页面的布局

其实很简单,就是内容稍微多了一点,用到的lable多了点。
然而,就是多了些控件,在你写约束的时候有没有感觉到脑袋大呢?
记得第一个带我的iOS老大就说过:相对复杂的布局就要模块化。下面就说下我是怎么对这个View进行约束的吧:
中间是table,可滚,也就是说约束的时候可以尽情的欺负这个table,满足头 尾之后的空间都是它的。
这样就大体分成了三个部分,尾部的四行还可以分成两部分。大概就是这样一块块去约束

一个框代表一个View,让约束相对独立了起来。不至于牵一发而动全身,而想对某个模块做整体修改的时候也会方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值