「这是我参与2022首次更文挑战的第42天,活动详情查看:2022首次更文挑战」。

I 图片平移&旋转处理

列表的分组headView的图片平移、旋转处理

1.1 image平变量英文移处理


#pragma mark - setTransform 处理
//Tells the view that its superview changed. 当前的控件加载到父控件(tableview)的时候调用
- (void)didMoveToSuperview{
    NSLog(@"%s",__func__);
    //2.对button的imageView的image进行平移、翻滚--先加载数据,在设置平移
    CGFloat angle = (self.friendsGroup.isOpen) ? M_PI_2 :0;
    [self.titleButtonView.imageView setTransform:CGAffineTransformMakeRotation(angle)];
}
//对imageView进行内容排列对齐方式、是否剪切超出部分进行设置
  [_titleButtonView.imageView setContentMode:UIViewContentModeCenter];
  [_titleButtonView.imageView setClipsToBounds:NO];//subviews are confined to the bounds of the view. 不剪切超出的部分

1.2 图片的拉伸处理

消息按钮的背景图片ImageView、titleLa指针变量不占用存储空间bel,以及button本身之间的大小关系处理

iOS小技能: 图片平移、旋转处理

iOS小技能: 图片平移、旋转处理

iOS小技能: 图片平移、旋转处理

1.ios123 图片拉伸

确定图片可调整的小矩形resizableImageWithCapInsets: (确定可拉伸、平铺的的小矩形)。变量类型有哪些

获取可拉伸图片:确定填充“拉伸之后的空白区域”的小矩形


#pragma mark - 获取可拉伸图片--确定填充“拉伸之后的空白区域”的小矩形
- (UIImage *)resizableImageWithImage:(UIImage *) image{
    CGFloat widthForTopORBottom = image.size.width*0.5f -1;//inset的top、bottom
    CGFloat heightForLeftORRight = image.size.height*0.5f -1;//inset的left、right
    UIImage *resizableImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(heightForLeftORRight, widthForTopORBottom, heightForLeftORRight, widthForTopORBottom)];
    return resizableImage;
}

II 其他相关知识点

2.逆向思维案例100个1 键盘处理

  [center addObserver:self selector:@selector(keyboardDidChangeFrame:) name:UIKeyboardDidChangeFrameNotification object:nil];//监听键盘通知
#pragma mark - scrollView 的代理方法
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    NSLog(@"%s",__func__);
    //关闭键盘
    [self.view endEditing:YES];
}
/** 键盘弹出的frame
2016-03-28 09:41:27.498 20160525-QQinterface[842:16465] NSConcreteNotification 0x7b274c00 {name = UIKeyboardDidChangeFrameNotification; userInfo = {
    UIKeyboardAnimationCurveUserInfoKey = 7;
    UIKeyboardAnimationDurationUserInfoKey = "0.25";
    UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {320, 253}}";
    UIKeyboardCenterBeginUserInfoKey = "NSPoint: {160, 606.5}";
    UIKeyboardCenterEndUserInfoKey = "NSPoint: {160, 353.5}";
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 480}, {320, 253}}";
    UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 227}, {320, 253}}";
    UIKeyboardIsLocalUserInfoKey = 1;
}} */
/** 关闭键盘时候的frame信息*/
2016-03-28 09:41:30.775 20160525-QQinterface[842:16465] -[ViewController scrollViewWillBeginDragging:]
2016-03-28 09:41:31.287 20160525-QQinterface[842:16465] NSConcreteNotification 0x7b21cae0 {name = UIKeyboardDidChangeFrameNotification; userInfo = {
    UIKeyboardAnimationCurveUserInfoKey = 7;
    UIKeyboardAnimationDurationUserInfoKey = "0.25";
    UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {320, 253}}";
    UIKeyboardCenterBeginUserInfoKey = "NSPoint: {160, 353.5}";
    UIKeyboardCenterEndUserInfoKey = "NSPoint: {160, 606.5}";
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 227}, {320, 253}}";
    UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 480}, {320, 253}}";
    UIKeyboardIsLocalUserInfoKey = 1;
}}

处理键盘的属性:谁负责唤起键盘,谁去逆向生长修改键盘属性信息

UIKeyboardWillChangeFrameNotification object:nil];
    //2.处理textFieldView的输入控件
    self.textFieldView.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 8, 0)];
    self.textFieldView.leftViewMode = UITextFieldViewModeWhileEditing;
    //3.键盘信息处理原则:谁触发键盘弹出的,谁去负责处理键盘的属性
    [self.textFieldView setReturnKeyType:UIReturnKeySend];
    [self.textFieldView setEnablesReturnKeyAutomatically:YES];// indicating whether the Return key is automatically enabled when the user is entering text

2.2 关于控件没显示的经逆向选择验小结:

  1. 父控件的frame
  2. 当前控件的frame
  3. 当前控件的hidden属性
  4. 当前控件的alpha<= 0.01

2.3 UIDevice

UIDevice类提高了一个单例对象,它代表着设备;通过它可以获取一些设备相关的信息(batteriOSyLevel、batteryState、model、systemVers逆向ion)

•通过[UIDevice currentDevice]可以获变量是什么意思取这个指针c语言单粒对象

2.4 ARC的介绍

ARC 是编译器特性,而不是IOS运行时特性,它也不类似ios是什么意思于其他语言的垃圾收集器(指针万用表的使用方法GC)


#import "Person.h"
@implementation Person
/** ARC 是编译器特性,而不是IOS运行时特性,它也不类似于其他语言的垃圾收集器(GC)
 1)ARC的规则:只要还有一个变量指向对象,对象就会保持在内存中-- 默认所有的实例变量和局部变量都是strong指针,因为它们能保持对象的生命。
 2)OC中有强参照strong和弱参照weak。--weak型的指针变量仍然可以指向一个对象,但不属于这个对象的拥有者;weak指针主要用于父子关系,即父亲拥有一个儿子的strong指针,儿子需使用weak指针指向父亲。
 典型的例子:
 你的ViewControl通过strong指针(self.view)拥有一个UITableView,UITableView的dataSource和delegate都是weak指针,指向你的viewControl
 @property(null_resettable, nonatomic,strong) UIView *view;
 @property (nonatomic, weak, nullable) id <UITableViewDelegate> delegate;
 3)在ARC(代码的一种静态分析工具)中dealloc 主要用于调试,判断对象被释放。可以用来管理一些资源,
 *** an implementation of dealloc, do not invoke the superclass’s implementation 不能调用[super dealloc]
 *** 在ARC下父类的dealloc同样由编译器自动完成,不能用来释放实例变量;
4)在ARC中考虑的是对象之间的关联,也就是那个对象拥有哪个对象。--无论何时你创建一个对象时,都要考虑谁该拥有它,以及这个对象需要存活多久
 5)ARC只能工作于OC。
 如果应用了core foundation,malloc()、free(),此时还是需要你来手动管理
 */
- (void) dealloc{
    NSLog(@"Person %@被释放  %s ",self.name,__FUNCTION__);
}
@end

2.5 调试技巧

  1. po 关键字的使ios模拟器用--打印内存对象

(lldb) po notification
NSConcreteNotification 0x10010eb20 {name = zhengaiwang; object = <HSMatchmakingCompany: 0x100206170>; userInfo = {
    info = "....";
    title = "\U65b0\U6765\U4e86\U4e00\U6279\U7f8e\U5973";
}}
  • 清空cell的颜色
[cell setBackgroundColor:[UIColor clearColor]];
[self.tableView setBackgroundColor:[UIColor colorWithRed:221/255.0 green:221/255.0 blue:221/255.0 alpha:1]];

see also

iOS解决压缩之后图片模糊的问题

blog.csdn.net/z929指针式万用表表盘详解118967/…

联系作者: iOS逆向(公号:iosrev)


作者简介:CSDN 博客专家认证丨全站 Top 50、华为云云享专家认证、iOS逆向公号号主


简历模板、技术互助。关注我,都给你。