美文网首页
ios 总结

ios 总结

作者: UILable攻城狮 | 来源:发表于2017-11-10 09:35 被阅读0次
    颜色
    #define UIColorFromARGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
    blue:((float)(rgbValue & 0xFF))/255.0 alpha:((float)((rgbValue & 0xFF000000) >> 24))/255.0]
    
    1、改变 UITextField 占位文字 颜色
    [_userName setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];
    
    2、禁止横屏 在Appdelegate 使用
    - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window  
    {  
        return UIInterfaceOrientationMaskPortrait;  
    }
    
    3、修改状态栏颜色 (默认黑色,修改为白色)
    //1.在Info.plist中设置UIViewControllerBasedStatusBarAppearance 为NO
    //2.在需要改变状态栏颜色的 AppDelegate中在 didFinishLaunchingWithOptions 方法中增加: 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    //3.如果需要在单个ViewController中添加,在ViewDidLoad方法中增加:
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    
    4、模糊效果
        UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
        UIVisualEffectView *test = [[UIVisualEffectView alloc] initWithEffect:effect];
        test.frame = self.view.bounds;
        test.alpha = 0.5;
        [self.view addSubview:test];
    
    5、强制横屏代码
    #pragma mark - 强制横屏代码
    - (BOOL)shouldAutorotate
    {
        //是否支持转屏
        return NO;
    }
    
    - (UIInterfaceOrientationMask)supportedInterfaceOrientations
    {
        //支持哪些转屏方向
        return UIInterfaceOrientationMaskLandscape;
    }
    
    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
    {
        return UIInterfaceOrientationLandscapeRight;
    }
    
    - (BOOL)prefersStatusBarHidden
    {
        return NO;
    }
    
    6、在状态栏显示有网络请求的提示器
       [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
       [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    
    7、相对路径
        $(SRCROOT)/
    
    8、视图是否自动(只是把第一个自动)向下挪64
        self.automaticallyAdjustsScrollViewInsets = NO; //不让系统帮咱们把scrollView及其子类的视图向下调整64
    
    9、 隐藏手机的状态栏
    -(BOOL)prefersStatusBarHidden {
    return YES;
    }
    
    10、代理的安全保护【断是否有代理,和代理是否执行了代理方法】
    if (self.delegate && [self.delegate respondsToSelector:@selector(passValueWithArray:)]) {
        // make you codes
    
    }
    
    11、在ARC工程中导入MRC的类和在MRC工程中导入ARC的类
    // 在ARC工程中导入MRC的类  我们选中工程->选中targets中的工程,然后选中Build Phases->在导入的类后边加入标记 -  fno-objc-arc
    // 在MRC工程中导入ARC的类 路径与上面一致,在该类后面加上标记 -fobjc-arc
    
    12、通过2D仿射函数实现小的动画效果(变大缩小) --可用于自定义pageControl中
    [UIView animateWithDuration:0.3 animations:^{
        imageView.transform = CGAffineTransformMakeScale(2, 2);
    } completion:^(BOOL finished) {
        imageView.transform = CGAffineTransformMakeScale(1.0, 1.0);
    }];
    
    13、查看系统所有字体
    for (id familyName in [UIFont familyNames]) {
        NSLog(@"%@", familyName);
        for (id fontName in [UIFont fontNamesForFamilyName:familyName]) NSLog(@"  %@", fontName);
    }
    
    14、判断一个字符串是否为数字
    
    NSCharacterSet *notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
    if ([str rangeOfCharacterFromSet:notDigits].location == NSNotFound) {// 是数字
    
    } else {// 不是数字
    
    }
    
    15、将一个view保存为pdf格式
    - (void)createPDFfromUIView:(UIView*)aView saveToDocumentsWithFileName:(NSString*)aFilename
    {
        NSMutableData *pdfData = [NSMutableData data];
        UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
        UIGraphicsBeginPDFPage();
        CGContextRef pdfContext = UIGraphicsGetCurrentContext();
        [aView.layer renderInContext:pdfContext];
        UIGraphicsEndPDFContext();
    
        NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
        NSString* documentDirectory = [documentDirectories objectAtIndex:0];
        NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename];
        [pdfData writeToFile:documentDirectoryFilename atomically:YES];
        NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename);
    }
    
    16、让一个view在父视图中心
    child.center = [parent convertPoint:parent.center fromView:parent.superview];
    
    17、获取当前导航控制器下前一个控制器
    - (UIViewController *)backViewController
    {
        NSInteger myIndex = [self.navigationController.viewControllers indexOfObject:self];
    
        if ( myIndex != 0 && myIndex != NSNotFound ) {
            return [self.navigationController.viewControllers objectAtIndex:myIndex-1];
        } else {
            return nil;
        }
    }
    
    18、保存UIImage到本地
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Image.png"];
    [UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];
    
    19、键盘上方增加工具栏
    UIToolbar *keyboardDoneButtonView = [[UIToolbar alloc] init];
    [keyboardDoneButtonView sizeToFit];
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                   style:UIBarButtonItemStyleBordered target:self
                                                                  action:@selector(doneClicked:)];
    [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]];
    txtField.inputAccessoryView = keyboardDoneButtonView;
    
    20、在image上绘制文字并生成新的image
        UIFont *font = [UIFont boldSystemFontOfSize:12];
        UIGraphicsBeginImageContext(image.size);
        [image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];
        CGRect rect = CGRectMake(point.x, point.y, image.size.width, image.size.height);
        [[UIColor whiteColor] set];
        [text drawInRect:CGRectIntegral(rect) withFont:font]; 
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
    21、判断一个view是否为另一个view的子视图
    // 如果myView是self.view本身,也会返回yes
    BOOL isSubView = [myView isDescendantOfView:self.view];
    
    22、判断一个字符串是否包含另一个字符串
    // 方法一、这种方法只适用于iOS8之后,如果是配iOS8之前用方法二
    if ([str containsString:otherStr]) NSLog(@"包含");
    
    // 方法二
    NSRange range = [str rangeOfString:otherStr];
    if (range.location != NSNotFound) NSLog(@"包含");
    
    23、判断某一行的cell是否已经显示
    CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
    BOOL completelyVisible = CGRectContainsRect(tableView.bounds, cellRect);
    
    24、让导航控制器pop回指定的控制器
    NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
    for (UIViewController *aViewController in allViewControllers) {
        if ([aViewController isKindOfClass:[RequiredViewController class]]) {
            [self.navigationController popToViewController:aViewController animated:NO];
            break;
        }
    }
    
    25、获取屏幕方向
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    
    if(orientation == 0) //Default orientation 
        //默认
    else if(orientation == UIInterfaceOrientationPortrait)
        //竖屏
    else if(orientation == UIInterfaceOrientationLandscapeLeft)
        // 左横屏
    else if(orientation == UIInterfaceOrientationLandscapeRight)
        //右横屏
    
    26、UIWebView添加单击手势不响应
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(webViewClick)];
            tap.delegate = self;
            [_webView addGestureRecognizer:tap];
    
    // 因为webView本身有一个单击手势,所以再添加会造成手势冲突,从而不响应。需要绑定手势代理,并实现下边的代理方法
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
        return YES;
    }
    
    27、获取手机RAM容量
    
    // 需要导入#import
    mach_port_t host_port;
        mach_msg_type_number_t host_size;
        vm_size_t pagesize;
    
        host_port = mach_host_self();
        host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
        host_page_size(host_port, &pagesize);
    
        vm_statistics_data_t vm_stat;
    
        if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS) {
            NSLog(@"Failed to fetch vm statistics");
        }
    
        /* Stats in bytes */
        natural_t mem_used = (vm_stat.active_count +
                              vm_stat.inactive_count +
                              vm_stat.wire_count) * pagesize;
        natural_t mem_free = vm_stat.free_count * pagesize;
        natural_t mem_total = mem_used + mem_free;
        NSLog(@"已用: %u 可用: %u 总共: %u", mem_used, mem_free, mem_total);
    
    28、地图上两个点之间的实际距离
    
    // 需要导入#import   位置A、B
    CLLocation *locA = [[CLLocation alloc] initWithLatitude:34 longitude:113];
    CLLocation *locB = [[CLLocation alloc] initWithLatitude:31.05 longitude:121.76];
    // CLLocationDistance求出的单位为米
    CLLocationDistance distance = [locA distanceFromLocation:locB];
    
    29、在应用中打开设置的某个界面
    
    // 打开设置->通用
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General"]];
    
    // 以下是设置其他界面
    prefs:root=General&path=About
    prefs:root=General&path=ACCESSIBILITY
    prefs:root=AIRPLANE_MODE
    prefs:root=General&path=AUTOLOCK
    prefs:root=General&path=USAGE/CELLULAR_USAGE
    prefs:root=Brightness
    prefs:root=Bluetooth
    prefs:root=General&path=DATE_AND_TIME
    prefs:root=FACETIME
    prefs:root=General
    prefs:root=General&path=Keyboard
    prefs:root=CASTLE
    prefs:root=CASTLE&path=STORAGE_AND_BACKUP
    prefs:root=General&path=INTERNATIONAL
    prefs:root=LOCATION_SERVICES
    prefs:root=ACCOUNT_SETTINGS
    prefs:root=MUSIC
    prefs:root=MUSIC&path=EQ
    prefs:root=MUSIC&path=VolumeLimit
    prefs:root=General&path=Network
    prefs:root=NIKE_PLUS_IPOD
    prefs:root=NOTES
    prefs:root=NOTIFICATIONS_ID
    prefs:root=Phone
    prefs:root=Photos
    prefs:root=General&path=ManagedConfigurationList
    prefs:root=General&path=Reset
    prefs:root=Sounds&path=Ringtone
    prefs:root=Safari
    prefs:root=General&path=Assistant
    prefs:root=Sounds
    prefs:root=General&path=SOFTWARE_UPDATE_LINK
    prefs:root=STORE
    prefs:root=TWITTER
    prefs:root=FACEBOOK
    prefs:root=General&path=USAGE prefs:root=VIDEO
    prefs:root=General&path=Network/VPN
    prefs:root=Wallpaper
    prefs:root=WIFI
    prefs:root=INTERNET_TETHERING
    prefs:root=Phone&path=Blocked
    prefs:root=DO_NOT_DISTURB
    
    30、监听scrollView是否滚动到了顶部/底部
    
    -(void)scrollViewDidScroll: (UIScrollView*)scrollView
    {
        float scrollViewHeight = scrollView.frame.size.height;
        float scrollContentSizeHeight = scrollView.contentSize.height;
        float scrollOffset = scrollView.contentOffset.y;
    
        if (scrollOffset == 0)
        {
            // 滚动到了顶部
        }
        else if (scrollOffset + scrollViewHeight == scrollContentSizeHeight)
        {
            // 滚动到了底部
        }
    }
    
    31、从导航控制器中删除某个控制器
    
    // 方法一、知道这个控制器所处的导航控制器下标
    NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
    [navigationArray removeObjectAtIndex: 2]; 
    self.navigationController.viewControllers = navigationArray;
    
    // 方法二、知道具体是哪个控制器
    NSArray* tempVCA = [self.navigationController viewControllers];
    for(UIViewController *tempVC in tempVCA)
    {
        if([tempVC isKindOfClass:[urViewControllerClass class]])
        {
            [tempVC removeFromParentViewController];
        }
    }
    
    32、触摸事件类型
    
    UIControlEventTouchCancel 取消控件当前触发的事件
    UIControlEventTouchDown 点按下去的事件
    UIControlEventTouchDownRepeat 重复的触动事件
    UIControlEventTouchDragEnter 手指被拖动到控件的边界的事件
    UIControlEventTouchDragExit 一个手指从控件内拖到外界的事件
    UIControlEventTouchDragInside 手指在控件的边界内拖动的事件
    UIControlEventTouchDragOutside 手指在控件边界之外被拖动的事件
    UIControlEventTouchUpInside 手指处于控制范围内的触摸事件
    UIControlEventTouchUpOutside 手指超出控制范围的控制中的触摸事件
    
    33、比较两个UIImage是否相等
    - (BOOL)image:(UIImage *)image1 isEqualTo:(UIImage *)image2
    {
        NSData *data1 = UIImagePNGRepresentation(image1);
        NSData *data2 = UIImagePNGRepresentation(image2);
    
        return [data1 isEqual:data2];
    }
    
    34、代码方式调整屏幕亮度
    // brightness属性值在0-1之间,0代表最小亮度,1代表最大亮度
    [[UIScreen mainScreen] setBrightness:0.5];
    
    35、根据经纬度获取城市等信息
    
    // 创建经纬度
    CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
    //创建一个译码器
    CLGeocoder *cLGeocoder = [[CLGeocoder alloc] init];
    [cLGeocoder reverseGeocodeLocation:userLocation completionHandler:^(NSArray *placemarks, NSError *error) {
        CLPlacemark *place = [placemarks objectAtIndex:0];
        // 位置名
        NSLog(@"name,%@",place.name);
        // 街道
        NSLog(@"thoroughfare,%@",place.thoroughfare);
        // 子街道
        NSLog(@"subThoroughfare,%@",place.subThoroughfare);
        // 市
        NSLog(@"locality,%@",place.locality);
        // 区
        NSLog(@"subLocality,%@",place.subLocality); 
        // 国家
        NSLog(@"country,%@",place.country);
        }
    }];
    
    36、如何防止添加多个NSNotification观察者?
    // 解决方案就是添加观察者之前先移除下这个观察者
    [[NSNotificationCenter defaultCenter] removeObserver:observer name:name object:object];
    [[NSNotificationCenter defaultCenter] addObserver:observer selector:selector name:name object:object];
    
    37、处理字符串,使其首字母大写
    NSString *str = @"abcdefghijklmn";
     NSString *resultStr;
    if (str && str.length > 0) {
         resultStr = [str stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[str substringToIndex:1] capitalizedString]];
    }
    NSLog(@"%@", resultStr);
    
    38、获取字符串中的数字
    - (NSString *)getNumberFromStr:(NSString *)str
    {
        NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
        return [[str componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""];
    }
    
    39、为UIView的某个方向添加边框
    - (void)wzb_addBorder:(WZBBorderDirectionType)direction color:(UIColor *)color width:(CGFloat)width
    {
        CALayer *border = [CALayer layer];
        border.backgroundColor = color.CGColor;
        switch (direction) {
            case WZBBorderDirectionTop:
            {
                border.frame = CGRectMake(0.0f, 0.0f, self.bounds.size.width, width);
            }
                break;
            case WZBBorderDirectionLeft:
            {
                border.frame = CGRectMake(0.0f, 0.0f, width, self.bounds.size.height);
            }
                break;
            case WZBBorderDirectionBottom:
            {
                border.frame = CGRectMake(0.0f, self.bounds.size.height - width, self.bounds.size.width, width);
            }
                break;
            case WZBBorderDirectionRight:
            {
                border.frame = CGRectMake(self.bounds.size.width - width, 0, width, self.bounds.size.height);
            }
                break;
            default:
                break;
        }
        [self.layer addSublayer:border];
    }
    
    40、自动搜索功能,用户连续输入的时候不搜索,用户停止输入的时候自动搜索(我这里设置的是0.5s,可根据需求更改)
    // 输入框文字改变的时候调用
    -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
        // 先取消调用搜索方法
        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(searchNewResult) object:nil];
        // 0.5秒后调用搜索方法
        [self performSelector:@selector(searchNewResult) withObject:nil afterDelay:0.5];
    }
    
    41、修改UISearchBar的占位文字颜色
    // 方法一(推荐使用)
    UITextField *searchField = [searchBar valueForKey:@"_searchField"];
    [searchField setValue:[UIColor blueColor] forKeyPath:@"_placeholderLabel.textColor"];
    
    // 方法二(已过期)
    [[UILabel appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]];
    
     // 方法三(已过期)
    NSDictionary *placeholderAttributes = @{NSForegroundColorAttributeName : [UIColor redColor], NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue" size:15],};
    NSAttributedString *attributedPlaceholder = [[NSAttributedString alloc] initWithString:searchBar.placeholder attributes:placeholderAttributes];
    [[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setAttributedPlaceholder:attributedPlaceholder];
    
    42、动画执行removeFromSuperview
    [UIView animateWithDuration:0.2
                    animations:^{
                         view.alpha = 0.0f;
                    } completion:^(BOOL finished){
                        [view removeFromSuperview];
                    }];
    
    43、修改image颜色
    UIImage *image = [UIImage imageNamed:@"test"];
    imageView.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
    CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClipToMask(context, rect, image.CGImage);
    CGContextSetFillColorWithColor(context, [[UIColor redColor] CGColor]);
    CGContextFillRect(context, rect);
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    UIImage *flippedImage = [UIImage imageWithCGImage:img.CGImage scale:1.0 orientation: UIImageOrientationDownMirrored];
    imageView.image = flippedImage;
    
    44、利用runtime获取一个类所有属性
    - (NSArray *)allPropertyNames:(Class)aClass
    {
        unsigned count;
        objc_property_t *properties = class_copyPropertyList(aClass, &count);
    
        NSMutableArray *rv = [NSMutableArray array];
    
        unsigned i;
        for (i = 0; i < count; i++)
        {
            objc_property_t property = properties[i];
            NSString *name = [NSString stringWithUTF8String:property_getName(property)];
            [rv addObject:name];
        }
    
        free(properties);
    
        return rv;
    }
    
    45、让push跳转动画像modal跳转动画那样效果(从下往上推上来)
    
    - (void)push
    {
    TestViewController *vc = [[TestViewController alloc] init];
        vc.view.backgroundColor = [UIColor redColor];
        CATransition* transition = [CATransition animation];
        transition.duration = 0.4f;
        transition.type = kCATransitionMoveIn;
        transition.subtype = kCATransitionFromTop;
        [self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
        [self.navigationController pushViewController:vc animated:NO];
    }
    
    - (void)pop
    {
    CATransition* transition = [CATransition animation];
        transition.duration = 0.4f;
        transition.type = kCATransitionReveal;
        transition.subtype = kCATransitionFromBottom;
        [self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
        [self.navigationController popViewControllerAnimated:NO];
    }
    

    相关文章

      网友评论

          本文标题:ios 总结

          本文链接:https://www.haomeiwen.com/subject/kpgvmxtx.html