使用代码片段

原文连接

比较实用的代码片段

比较两个CGRect/CGSize/CGPoint是否相等

CGRectEqualToRect(rect1, rect2) // 两个区域相等

CGPointEqualToPoint(point1, point2) // 两个点相等

 CGSizeEqualToSize(size1, size2))  // 两个size相等

CGRectIntersectsRect(rect1, rect2)  //判断两个rect是否有交叉

比较两个NSDate相差多少小时

NSDate* date1 = someDate;

NSDate* date2 = someOtherDate;

NSTimeInterval distanceBetweenDates = [date1 timeIntervalSinceDate:date2];

double secondsInAnHour = 3600;

// 除以3600是把秒化成小时,除以60得到结果为相差的分钟数

NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnHour;

每个cell之间增加间距

// 方法一,每个分区只显示一行cell,分区头当作你想要的间距(注意,从数据源数组中取值的时候需要用indexPath.section而不是indexPath.row)

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return yourArry.count;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return 1;

}

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {

    return cellSpacingHeight;

}

// 方法二,在cell的contentView上加个稍微低一点的view,cell上原本的内容放在你的view上,而不是contentView上,这样能伪造出一个间距来。

// 方法三,自定义cell,重写setFrame:方法

- (void)setFrame:(CGRect)frame {

    frame.size.height -= 20;

    [super setFrame:frame];

}

判断一个字符串是否为数字

NSCharacterSet *notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];

    if ([str rangeOfCharacterFromSet:notDigits].location == NSNotFound) { // 是数字

    } else  { // 不是数字

     }

让一个view在父视图中心

child.center = [parent convertPoint:parent.center fromView:parent.superview];

获取当前导航控制器下前一个控制器

- (UIViewController *)backViewController {

    NSInteger myIndex = [self.navigationController.viewControllers indexOfObject:self];

    if ( myIndex != 0 && myIndex != NSNotFound ) {

        return [self.navigationController.viewControllers objectAtIndex:myIndex-1];

    } else {

        return nil;

    }

}

键盘上方增加工具栏

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;

判断某特定的cell是否已经显示

CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];

BOOL completelyVisible = CGRectContainsRect(tableView.bounds, cellRect);

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;

}

获取手机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);

地图上两个点之间的实际距离

// 需要导入#import

CLLocation *locA = [[CLLocation alloc] initWithLatitude:34 longitude:113];

    CLLocation *locB = [[CLLocation alloc] initWithLatitude:31.05 longitude:121.76];

// CLLocationDistance求出的单位为米

CLLocationDistance distance = [locA distanceFromLocation:locB];

计算UILabel上某段文字的frame

@implementation UILabel (TextRect)

- (CGRect)boundingRectForCharacterRange:(NSRange)range

{

    NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:[self attributedText]];

    NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];

    [textStorage addLayoutManager:layoutManager];

    NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:[self bounds].size];

    textContainer.lineFragmentPadding = 0;

    [layoutManager addTextContainer:textContainer];

    NSRange glyphRange;

    [layoutManager characterRangeForGlyphRange:range actualGlyphRange:&glyphRange];

    return [layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:textContainer];

}

UITextField文字周围增加边距

    // 子类化UITextField,增加insert属性

@interface WZBTextField : UITextField

@property (nonatomic, assign) UIEdgeInsets insets;

@end

// 在.m文件重写下列方法

- (CGRect)textRectForBounds:(CGRect)bounds {

    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) {

        return [self adjustRectWithWidthRightView:paddedRect];

    }

    return paddedRect;

}

- (CGRect)placeholderRectForBounds:(CGRect)bounds {

    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) {

        return [self adjustRectWithWidthRightView:paddedRect];

    }

    return paddedRect;

}

- (CGRect)editingRectForBounds:(CGRect)bounds {

    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeWhileEditing) {

        return [self adjustRectWithWidthRightView:paddedRect];

    }

    return paddedRect;

}

- (CGRect)adjustRectWithWidthRightView:(CGRect)bounds {

    CGRect paddedRect = bounds;

    paddedRect.size.width -= CGRectGetWidth(self.rightView.frame);

    return paddedRect;

}

设置UITextField光标位置

// textField需要设置的textField,index要设置的光标位置

- (void)cursorLocation:(UITextField *)textField index:(NSInteger)index

{

    NSRange range = NSMakeRange(index, 0);

    UITextPosition *start = [textField positionFromPosition:[textField beginningOfDocument] offset:range.location];

    UITextPosition *end = [textField positionFromPosition:start offset:range.length];

    [textField setSelectedTextRange:[textField textRangeFromPosition:start toPosition:end]];

}

解决当UIScrollView上有UIButton的时候,触摸到button滑动不了的问题

// 子类化UIScrollView,并重写以下方法

- (instancetype)initWithFrame:(CGRect)frame {

    if (self = [super initWithFrame:frame]) {

        self.delaysContentTouches = NO;

    }

    return self;

}

- (BOOL)touchesShouldCancelInContentView:(UIView *)view {

    if ([view isKindOfClass:UIButton.class]) {

        return YES;

    }

    return [super touchesShouldCancelInContentView:view];

}

UITextView中的文字添加阴影效果

- (void)setTextLayer:(UITextView *)textView color:(UIColor *)color

{

    CALayer *textLayer = ((CALayer *)[textView.layer.sublayers objectAtIndex:0]);

    textLayer.shadowColor = color.CGColor;

    textLayer.shadowOffset = CGSizeMake(0.0f, 1.0f);

    textLayer.shadowOpacity = 1.0f;

    textLayer.shadowRadius = 1.0f;

}

tableView实现无限滚动

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    CGFloat actualPosition = scrollView.contentOffset.y;

    CGFloat contentHeight = scrollView.contentSize.height - scrollView.frame.size.height;

    if (actualPosition >= contentHeight) {

        [self.dataArr addObjectsFromArray:self.dataArr];

        [self.tableView reloadData];

    }

}

代码方式调整屏幕亮度

// brightness属性值在0-1之间,0代表最小亮度,1代表最大亮度

[[UIScreen mainScreen] setBrightness:0.5];

为UIView的某个方向添加边框

// 添加UIView分类

// UIView+WZB.h

#import

/**

边框方向

- WZBBorderDirectionTop: 顶部

- WZBBorderDirectionLeft: 左边

- WZBBorderDirectionBottom: 底部

- WZBBorderDirectionRight: 右边

*/

typedef NS_ENUM(NSInteger, WZBBorderDirectionType) {

    WZBBorderDirectionTop = 0,

    WZBBorderDirectionLeft,

    WZBBorderDirectionBottom,

    WZBBorderDirectionRight

};

@interface UIView (WZB)

/**

为UIView的某个方向添加边框

@param direction 边框方向

@param color 边框颜色

@param width 边框宽度

*/

- (void)wzb_addBorder:(WZBBorderDirectionType)direction color:(UIColor *)color width:(CGFloat)width;

@end

// UIView+WZB.m

#import "UIView+WZB.h"

@implementation UIView (WZB)

- (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];

}

通过属性设置UISwitch、UIProgressView等控件的宽高

mySwitch.transform = CGAffineTransformMakeScale(5.0f, 5.0f);

progressView.transform = CGAffineTransformMakeScale(5.0f, 5.0f);

自动搜索功能,用户连续输入的时候不搜索,用户停止输入的时候自动搜索(我这里设置的是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];

}

修改UISearchBar的占位文字颜色

    UITextField *searchField = [searchBar valueForKey:@"_searchField"];

    [searchField setValue:[UIColor blueColor] forKeyPath:@"_placeholderLabel.textColor"];

上传图片太大,压缩图片

-(UIImage *)resizeImage:(UIImage *)image {

    float actualHeight = image.size.height;

    float actualWidth = image.size.width;

    float maxHeight = 300.0;

    float maxWidth = 400.0;

    float imgRatio = actualWidth/actualHeight;

    float maxRatio = maxWidth/maxHeight;

    float compressionQuality = 0.5;//50 percent compression

    if (actualHeight > maxHeight || actualWidth > maxWidth)

    {

        if(imgRatio < maxRatio)

        {

            //adjust width according to maxHeight

            imgRatio = maxHeight / actualHeight;

            actualWidth = imgRatio * actualWidth;

            actualHeight = maxHeight;

        }

        else if(imgRatio > maxRatio)

        {

            //adjust height according to maxWidth

            imgRatio = maxWidth / actualWidth;

            actualHeight = imgRatio * actualHeight;

            actualWidth = maxWidth;

        }

        else

        {

            actualHeight = maxHeight;

            actualWidth = maxWidth;

        }

    }

    CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight);

    UIGraphicsBeginImageContext(rect.size);

    [image drawInRect:rect];

    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();

    NSData *imageData = UIImageJPEGRepresentation(img, compressionQuality);

    UIGraphicsEndImageContext();

    return [UIImage imageWithData:imageData];

}

你可能感兴趣的:(使用代码片段)