1、判断一个点或一个区域是否在某个指定的区域
/* Return true if `point' is contained in `rect', false otherwise. */
CG_EXTERN bool CGRectContainsPoint(CGRect rect, CGPoint point)
CG_AVAILABLE_STARTING(10.0, 2.0);
/* Return true if `rect2' is contained in `rect1', false otherwise. `rect2'
is contained in `rect1' if the union of `rect1' and `rect2' is equal to
`rect1'. */
CG_EXTERN bool CGRectContainsRect(CGRect rect1, CGRect rect2)
CG_AVAILABLE_STARTING(10.0, 2.0);
2、调整按钮内部imageView的大小
- (CGRect)imageRectForContentRect:(CGRect)contentRect
//去调整按钮内部imageView的大小
//返回按钮内部imageView尺寸位置
//contentRect:当前按钮的尺寸大小.
- (CGRect)imageRectForContentRect:(CGRect)contentRect {
CGFloat w = 40;
CGFloat h = 45;
CGFloat x = (contentRect.size.width-w)*0.5;
CGFloat y = 20;
CGRect rect = CGRectMake(x, y, w, h);
return rect;
}
3、设置一个按钮内部文字显示不同的文字属性
调用按钮的setAttributedTitle方法,根据range去设置不同位置文字的不同属性。
- (void)setAttributedTitle:(nullable NSAttributedString *)title forState:(UIControlState)state
//普通状态
NSString *first = @"VIP";
NSString *second = @"100元";
NSString *btnString = [NSString stringWithFormat:@"%@\n%@", first, second];
NSMutableAttributedString *attriStr = [[NSMutableAttributedString alloc] initWithString:btnString];
NSDictionary *dict = @{NSForegroundColorAttributeName : [UIColor yellowColor],NSFontAttributeName : [UIFont systemFontOfSize:15]};
NSRange range = NSMakeRange(first.length+1, second.length);
[attriStr addAttributes:dict range:range];
button.titleLabel.numberOfLines = 0;
button.titleLabel.textAlignment = NSTextAlignmentCenter;
[button setAttributedTitle:attriStr forState:UIControlStateNormal];
4、根据一张大图去裁剪成很多张小图片
CGImageRef __nullable CGImageCreateWithImageInRect( CGImageRef cg_nullable image, CGRect rect)
// 计算裁剪小图片的x坐标
littleImageX = i * littleImageW;
// 裁剪小图片并设置
CGImageRef littleImage = CGImageCreateWithImageInRect(origImage.CGImage, CGRectMake(littleImageX, 0, littleImageW, littleImageH));
UIImage *littleImageN = [UIImage imageWithCGImage:littleImage];
[btn setImage:littleImageN forState:UIControlStateNormal];
5、从上下文中清除某个区域
// 在上下文中清除Rect内的内容
CGContextClearRect(ctx, clearRect);
6、清除形变
self.view.transform = CGAffineTransformIdentity;
7、UIView动画的弹簧效果
Duration:动画的执行时长
delay:动画延时长.
Damping:动画的弹性系数,越小,弹簧效果越明显
initialSpringVelocity:弹簧初始化速度
[UIView animateWithDuration:0.8 delay:0 usingSpringWithDamping:0.1 initialSpringVelocity:0
options:UIViewAnimationOptionCurveLinear animations:^{
//动画执⾏行代码
} completion:^(BOOL finished) {
//动画完成时调⽤用.
}];
8、获取全局的(整个应用程序)导航条
UINavigationBar *bar = [UINavigationBar appearance];
获取指定类下的导航条,此方法常用在导航条类的+ (void)initialize方法中,对整个app的导航条做一次性的内容设置。
//获取指定类下的导航条
UINavigationBar *bar = [UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[
[self class]
]
];
9、导航条达到透明的效果
/*
设置导航条透明度为0,没有效果,还是原来的样⼦. 原因是因为导航条上面那一块并不直接是导航条,它是导航条里面的⼀个子控件. 所以在这里设置它没有效果,因为系统会生成⼀个半透明的图片.
self.navigationController.navigationBar.alpha = 0.0;
所以在这里我们可以考虑给它设置一个半透明的图片. 在这里,有一个模式,必须要传默认UIBarMetricsDefault模式. 在这里发现设为nil的时候,也没有效果,那是因为系统它做了⼀层判断,它会判断如果传入的系统图片为空的话,它就会帮你生成一个半透明的图片,设置导航条的背景图片.
**/
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
10、获取不需要渲染的原始图片
UIImage *image = [UIImage imageNamed:imageName];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
11、当tap手势和点击事件都存在是,默认手势的优先级更高,Touch不起作用,解决方法
实现UIGestureRecognizerDelegate
方法 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
/**
called before touchesBegan:withEvent: is called on the gesture recognizer for a new touch. return NO to prevent the gesture recognizer from seeing this touch
在touchesBegan:withEvent:之前调用,手势识别器获取一个新touch,返回NO,不让手势识别器识别该touch
@return NO:不让手势识别器识别该touch; YES:让手势识别器识别该touch
*/
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
} else {
return YES;
}
}
12、更新tableview时自动加一个序列帧动画
//更新数据(当更新tableView时会自动加一个序列帧动画)
[tableView beginUpdates];
[tableView endUpdates];
13、nil和NSNull区别
[NSNull null]; //空对象
nil //空
NSNull *null = [NSNull null];
NSDictionary *dict = @{@"name":@"zhangsan",@"age":[NSNull null]};
持续更行中........
网友评论