OC 小代码块

壹 、设置导航栏标题标字体颜色和分寸

   方法一:(自定义视图的办法,一般人也会使用那样的点子)

        便是在导航向上添加多个titleView,能够选取一个label,再安装label的背景颜色透明,字体什么的装置就很简短了。

       

  ACCESS 1ACCESS 2

//自定义标题视图
UILabel *titleLabel = [[UILabel  
alloc] initWithFrame:CGRectMake(0, 0, 200, 44)];
titleLabel.backgroundColor = [UIColor grayColor];
titleLabel.font = [UIFont boldSystemFontOfSize:20];
titleLabel.textColor = [UIColor greenColor];
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.text = @"新闻";
self.navigationItem.titleView = titleLabel;

View Code

  

  方法二:(在暗中同意突显的标题中一向改动文件的尺寸和颜料也是能够的)

  ACCESS 3ACCESS 4

[self.navigationController.navigationBar setTitleTextAttributes:@{
                                                                           NSFontAttributeName:[UIFont systemFontOfSize:19],
                                                                           NSForegroundColorAttributeName:[UIColor redColor]
                                                                         }
        ]

View Code

 

② 、多容器添加同一子控件的bug

  [someView addSubView:sbView];

  那么在被添加到父视图someView此前,如若sbView已经被otherView加载了,那么地点的代码会先讲sbView从otherView remove掉,在被加载到someView。

  所以一个view是不容许还要被一个以上的view加载做子视图的。

 

叁 、再次来到根控制器

  ACCESS 5ACCESS 6

- (void)dismissToRootViewController:(UIViewController *)viewController{
    if (viewController.presentingViewController == nil) {
        [viewController.navigationController popToRootViewControllerAnimated:NO];
    }else{
        UIViewController *vc = viewController.presentingViewController;
        while (vc.presentingViewController != nil) {
            vc = vc.presentingViewController;
        }
        [vc dismissViewControllerAnimated:NO completion:nil];
    }
}

View Code

 

四 、获取照片拍录地方音讯

  ACCESS 7ACCESS 8

- (NSDictionary *)metadata {
    return self.asset.defaultRepresentation.metadata;
}

- (CLGeocoder *)geoC
{
    if(!_geoC){
        _geoC = [[CLGeocoder alloc] init];
    }
    return _geoC;
}
- (void)addressInit{
      // 获取位置信息
    NSDictionary *metadata = [self metadata];
    NSDictionary *GPSDict=[metadata objectForKey:(NSString*)kCGImagePropertyGPSDictionary];
     // 经纬度
    CLLocationDegrees latitude = [[GPSDict objectForKey:@"Latitude"] doubleValue];
    CLLocationDegrees longitude = [[GPSDict objectForKey:@"Longitude"] doubleValue];
    CLLocation *loc = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
    WEAKSELF
     // 反地理编码
    [self.geoC reverseGeocodeLocation:loc completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        CLPlacemark *pl = [placemarks firstObject];
        if(error == nil){
            NSString *str = [NSString stringWithFormat:@"%@%@%@",pl.locality, pl.subLocality, pl.name];
            weakSelf.address = str;
        }
        else{
            weakSelf.address = @"";
        }
    }];
}

View Code

 

5、随机数  随机色

  Objective-C 中有个arc4random()函数用来变化随机数且不要求种子,

       但是那个函数生成的随机数范围相比大,需求用取模的算法对随机值进行限制,有点麻烦。

   

  更有益的即兴数函数arc4random_uniform(x),

       可以用来发出0~(x-1)范围内的任意数,不须求再进行取模运算。

       若是要转变1~x的任性数,能够那样写:arc4random_uniform(x)+1

 

  随机色:

  ACCESS 9ACCESS 10

#define random(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0alpha:(a)/255.0]

#define randomColor random(arc4random_uniform(256), arc4random_uniform(256), arc4random_uniform(256), arc4random_uniform(256))

[UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1];

View Code

 

6、退出app

  ACCESS 11ACCESS 12

 AppDelegate *app = [UIApplication sharedApplication].delegate;
 UIWindow *window = app.window;
           
  [UIView animateWithDuration:0.4f animations:^{
         window.alpha = 0;
         CGFloat y = window.bounds.size.height;
         CGFloat x = window.bounds.size.width / 2;
         window.frame = CGRectMake(x, y, 0, 0);
 } completion:^(BOOL finished) {
          exit(0);
  }];

View Code

 

⑦ 、移除导航条按钮

  ACCESS 13ACCESS 14

 UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
    button.frame = CGRectMake(0, 0, 30, 30);
    UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
    self.navigationItem.leftBarButtonItem = barButton;
#if 0
    //第一种
    self.navigationItem.leftBarButtonItem = nil;
#else
    //第二种
    [self.navigationController.navigationBar.subviews.lastObject setHidden:YES];
#endif

View Code

 

捌 、隐藏导航栏下划线

  ACCESS 15ACCESS 16

    // 1)声明UIImageView变量,存储底部横线
    @implementation MyViewController {
        UIImageView *navBarHairlineImageView;
    }
   //  2)在viewDidLoad中加入:
    navBarHairlineImageView = [self findHairlineImageViewUnder:navigationBar]
   
   // 3)
    - (UIImageView *)findHairlineImageViewUnder:(UIView *)view {
        if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) {
            return (UIImageView *)view;
        }
        for (UIView *subview in view.subviews) {
            UIImageView *imageView = [self findHairlineImageViewUnder:subview];
            if (imageView) {
                return imageView;
            }
        }
        return nil;
    }
   
    // 最后在viewWillAppear,viewWillDisappear中处理
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        navBarHairlineImageView.hidden = YES;
    }
   
    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
        navBarHairlineImageView.hidden = NO;
    }


    WEAKSELF
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        [weakSelf.navigationController.navigationBar.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if ([obj isKindOfClass:NSClassFromString(@"_UIBarBackground")]) {
                [obj.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                    if ([obj isKindOfClass:[UIImageView class]]) {
                        [obj setHidden:YES];
                    }
                }];
            }
        }];
    });

View Code

 

9、translucent 与 controller.view

  translucent = NO;

      ACCESS 17

   translucent = YES;

      ACCESS 18

十 、禁止使用第2方输入法

  ACCESS 19ACCESS 20

- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString*)extensionPointIdentifier
{
    return NO;
}

View Code

 

11、UIView截屏

  ACCESS 21ACCESS 22

  /*
    UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0);
   
    CGContextRef context = UIGraphicsGetCurrentContext();
   
    // Render the view
    [view.layer renderInContext:context];
   
    // Get the image from the context
    UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();
   
    // Cleanup the context you created
    UIGraphicsEndImageContext();
   
    return renderedImage;
    */  
+ (UIImage *)snapShotFrom:(UIView *)view{   
    // 避免frame为nil导致异常
    if (CGRectIsEmpty(view.frame)) {
        return nil;
    }
   
    UIGraphicsBeginImageContextWithOptions(view.frame.size, YES, 0.0);
   
    if ([view respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
        [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
    }
    else{
          // 占用内存高  引起异常
        [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    }
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
   
    return image;
}

View Code

  当视图不慢切换时的夭亡

    这么些崩溃是使用了while循环一连截屏玖十七遍webview发现的,崩溃为EXE_BAD_ACCESS 

    原因是afterScreenUpdates设置为了YES.

  为啥会崩溃呢? 因为安装为YES后,那一个方法会等在view
update停止在实施,如若在update甘休前view被release了,会现出找不到view的难点.所以须求设置为NO. 

 

ACCESS,12、XCODE调节和测试时不出示变量值/指针地址的消除方案

  1.Scheme中run里面确认保证设成debug

    ACCESS 23

   2.build settings-搜索optim,确保是-O0

    ACCESS 24

  3.build
settings-搜索-O2,改成-g。那项最坑爹,好像是暗许的设置成-O2的

    ACCESS 25

 

1三 、比较五个图片是不是一律

   1.一旦2张图片都被加载都resource中,而且图片名称已知,使用imageNamed:创设三个UIImage对象就好,然后用isequal去相比。

   2.两张图纸存款和储蓄在ios沙盒的有个别地点,未被加载到resource中,比较四个UIImage的data,看看是还是不是一律。

  ACCESS 26ACCESS 27

NSString* file = [dic stringByAppendingPathComponent:path];

UIImage *image = [UIImage imageWithContentsOfFile:file];

NSData *data1 = UIImagePNGRepresentation(image1);

NSData *data = UIImagePNGRepresentation(image);

if ([data isEqual:data1]) {

      NSLog(@"is equae");
}

View Code

 

14、UITableView间隔、颜色

   要想改变其seperator的莫大,是做不到的

    首先,我们将其sperator设置为none。

    其次,大家在塑造tableview的时候,使用多secton,每一个section中仅有三个row的方法创设。

    第②,设置每种section的headerView的冲天为务求的万丈。

    第六,重新定制每3个section的headerView,设置section的背景颜色为钦命的颜料。

    代码如下:

  ACCESS 28ACCESS 29

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, height)]; //height为设计师制定的高度。
        view.backgroundColor = [UIColor redColor];
        return view;
}

View Code

 

1⑤ 、实时检查和测试UIText菲尔德的变通

  使用UISearchBar,UISearchBar的内容动态改变的时候,大家是能够透过代办来获知这几个改变的。

    在应用UITextField的时候,没有合适的代办函数,使用注册公告。

  ACCESS 30ACCESS 31

    // 1,在initWithNibName中注册对应的通知:
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldChanged:) name:UITextFieldTextDidChangeNotification object:_passwordTextField];
        }
        return self;
    }

    // 2,实现textFieldChanged函数
    - (void)textFieldChanged:(id)sender
    {
        NSLog(@"current ContentOffset is %@",NSStringFromCGPoint(_contentView.contentOffset));
    }

    // 3,记得在dealloc中删除掉通知。
    - (void)dealloc
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:nil];
}

View Code

 

16、UITextField加阴影

  UITextView输入的时候,文字上边有影子,系统默许唯有UILabel有多少个简易的接口能够设阴影,

  至于UITextView的阴影就基本上没人用了,给UITextView的文字加阴影的章程,即由此layer层来设置。

   上代码

    请记得进入 QuartzCore.framework。

  ACCESS 32View
Code

 

1⑦ 、判断程序第2遍开发银行  

  ACCESS 33View
Code

 

18、查看UUID

  1.查看 xx.app 文件的 UUID,terminal 中输入命令 :

    ·dwarfdump –uuid xx.app/xx (xx代表你的体系名)

   2.查看 xx.app.dSYM 文件的 UUID ,在 terminal 中输入指令:

    ·dwarfdump –uuid xx.app.dSYM

   3.crash 文本内第叁行 Incident Identifier 便是该 crash 文件的 UUID。

 

1九 、禁止使用手势

  ACCESS 34ACCESS 35

<UIGestureRecognizerDelegate>

self.navigationController.interactivePopGestureRecognizer.delegate = self;

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
    return NO;
}

View Code

 

20、NSString对UTF-8编码解码  

  ACCESS 36ACCESS 37

// iOS中对字符串进行UTF-8编码:输出str字符串的UTF-8格式
[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

// 解码:把str字符串以UTF-8规则进行解码
[str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

View Code

 

2① 、手势与tableview事件冲突处理

  ACCESS 38ACCESS 39

// 在view上添加tag手势的时候,并且设置tag事件的代理
//然后根据具体的业务场景去写逻辑就可以了,比如
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    //Tip:我们可以通过打印touch.view来看看具体点击的view是具体是什么名称,像点击UITableViewCell时响应的View则是UITableViewCellContentView.
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        //返回为NO则屏蔽手势事件
        return NO;
    }
    return YES;
}

View Code

 

22、ScrollView header悬停  

  ACCESS 40ACCESS 41

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.y >= 50) {
        self.header.frame = CGRectMake(0, 0, 375, 35);
        [self.view addSubview:self.header];
    } else {
        self.header.frame = CGRectMake(0, 50, 375, 35);
        [self.scrollView addSubview:self.header];
    }
}

View Code

 

2叁 、从设备支撑的字体中随意选用三个

  ACCESS 42ACCESS 43

     // 从设备支持的字体中随机选择一个
    NSString *fontName = @"";
    
    NSUInteger count1 = arc4random() % ([UIFont familyNames].count);
    
    NSString *familyName = [UIFont familyNames][count1];
    
    NSUInteger count2 = [UIFont fontNamesForFamilyName:familyName].count;
    
    fontName = [UIFont fontNamesForFamilyName:familyName][arc4random() % count2];

View Code

 

24、UIFont 转
CGFontRef

  ACCESS 44ACCESS 45

   // 创建 UIFont 字体
    UIFont *font = [UIFont systemFontOfSize:15];
    
    // 转换成 CGFontRef
    CFStringRef fontName = (__bridge CFStringRef)font.fontName;
    CGFontRef fontRef = CGFontCreateWithFontName(fontName);

View Code

 

2五 、字符串转日期失利   NSDataFormatter 格式设置:  

  ACCESS 46ACCESS 47

//You're using the wrong formatter:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy"];
NSDate *startDatePlain=[formatter dateFromString:start];
NSDate *endDatePlain=[formatter dateFromString:end];

//You need to use your detailformatter:
NSDateFormatter *detailformatter = [[NSDateFormatter alloc] init];
[detailformatter setDateFormat:@"MM/dd/yyyy"];
NSDate *startDatePlain=[detailformatter dateFromString:start];
NSDate *endDatePlain=[detailformatter dateFromString:end];

//You've got the correct format set on detailformatter!

View Code

 

相关文章