写在前面
这些内容,写完就忘,用完就扔,这样很不好,特意总结记录一下,方便之后查阅。
ios 半边圆角
如果需要将UIView的4个角全部都为圆角,做法相当简单,只需设置其Layer的cornerRadius属性即可(项目需要使用QuartzCore框架)。而若要指定某几个角(小于4)为圆角而别的不变时,这种方法就不好用了。
对于这种情况,Stackoverflow上提供了几种解决方案。其中最简单优雅的方案,就是使用UIBezierPath。下面给出一段示例代码。
UIView *viewBackground = [[UIView alloc] initWithFrame:frame(10, 10, WIDTH-20, 182)];
viewBackground.backgroundColor = [UIColor whiteColor];
viewBackground.layer.cornerRadius = 3;
viewBackground.layer.masksToBounds = YES;
[self addSubview:viewBackground];
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:viewBackground.bounds byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = viewBackground.bounds;
maskLayer.path = maskPath.CGPath;
viewBackground.layer.mask = maskLayer;
其中
byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight
指定了需要成为圆角的角。该参数是UIRectCorner类型的,可选的值有:
* UIRectCornerTopLeft
* UIRectCornerTopRight
* UIRectCornerBottomLeft
* UIRectCornerBottomRight
* UIRectCornerAllCorners
ios推送跳转到指定页面
//获取当前屏幕显示的viewcontroller
- (UIViewController *)getCurrentVC
{
UIViewController *result = nil;
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
if(window.windowLevel != UIWindowLevelNormal)
{
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow * tmpWin in windows)
{
if(tmpWin.windowLevel == UIWindowLevelNormal)
{
window = tmpWin;
break;
}
}
}
UIView *frontView = [[window subviews] objectAtIndex:0];
id nextResponder = [frontView nextResponder];
if([nextResponder isKindOfClass:[UIViewController class]]){
result = nextResponder;
}else{
result = window.rootViewController;
}
return result;
}
//找到当前控制器 判断
- (UIViewController *)getDisViewController
{
UIViewController *currVC;
if ([[self getCurrentVC] isKindOfClass:[SystemViewController class]]) {//判断是是不是tabbar 是tabbar找到最好导航最后一个控制器是当前控制器
SystemViewController *tabBar = (SystemViewController *)[self getCurrentVC];
SystemNavigationController *mainNC = tabBar.selectedViewController;
return mainNC.viewControllers.lastObject;
}
/*else if ([ [self getCurrentVC] isKindOfClass:[WJInterpreterTabBarController class]])
{
WJInterpreterTabBarController *tabBar = (WJInterpreterTabBarController *)[self getCurrentVC];
WJNAVController *mainNC = tabBar.selectedViewController;
return mainNC.viewControllers.lastObject;
}*/
else if ([ [self getCurrentVC] isKindOfClass:[SystemNavigationController class]]){//如果当前页面是导航,找到导航数组中最后一个控制器 ,是当前屏幕显示的控制器
SystemNavigationController *mainNC = (SystemNavigationController *)[self getCurrentVC];
return mainNC.viewControllers.lastObject;
}else if ([ [self getCurrentVC] isKindOfClass:[UIViewController class]]){
return [self getCurrentVC] ;
}else{
return [self getCurrentVC] ;
}
}
//获取到控制器 直接跳转
UIViewController *vc = [self getDisViewController];
[vc.navigationController pushViewController:systemMessageVC animated:YES];
ios返回指定控制器
for (UIViewController *controller in self.navigationController.viewControllers) {
if ([controller isKindOfClass:[ChatViewController class]]) {
[self.navigationController popToViewController:controller animated:YES];
}
}
IOS 获取视频第一帧
#import <AVFoundation/AVAsset.h>
#import <AVFoundation/AVAssetImageGenerator.h>
#import <AVFoundation/AVTime.h>
// 获取视频第一帧
- (UIImage*) getVideoPreViewImage:(NSURL *)path
{
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:path options:nil];
AVAssetImageGenerator *assetGen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
assetGen.appliesPreferredTrackTransform = YES;
CMTime time = CMTimeMakeWithSeconds(0.0, 600);
NSError *error = nil;
CMTime actualTime;
CGImageRef image = [assetGen copyCGImageAtTime:time actualTime:&actualTime error:&error];
UIImage *videoImage = [[UIImage alloc] initWithCGImage:image];
CGImageRelease(image);
return videoImage;
}
IOS label加图片
NSMutableAttributedString * attriStr = [[NSMutableAttributedString alloc] initWithString:_labelGrowthValue.text];
/**
添加图片到指定的位置
*/
NSTextAttachment *attchImage = [[NSTextAttachment alloc] init];
// 表情图片
attchImage.image = [UIImage imageNamed:@"icon_chengzhangzhi"];
// 设置图片大小
attchImage.bounds = CGRectMake(0, 0, 15, 15);
NSAttributedString *stringImage = [NSAttributedString attributedStringWithAttachment:attchImage];
[attriStr insertAttributedString:stringImage atIndex:0];
_labelGrowthValue.attributedText = attriStr;
iOS UITap 禁止传播到其他控件
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(keyboardHide:)];
//设置成NO表示当前控件响应后会传播到其他控件上,默认为YES。
tapGestureRecognizer.cancelsTouchesInView = NO;
//将触摸事件添加到当前view
ios 杀死程序和程序进入后台
杀死程序时调用
//进程杀死时会调用这个
- (void)applicationWillTerminate:(UIApplication *)application{
DLog(@"进程杀死时会调用这个");
}
进入后台时调用这个
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(comeHome:) name:@"UIApplicationDidEnterBackgroundNotification" object:nil];
- (void)comeHome:(UIApplication *)application {
NSLog(@"进入后台");
}