iOS 項(xiàng)目中常用效果

iOS項(xiàng)目常用效果

  1. 改變 UITextField 占位文字的顏色
[textField setValue:[UIcolor redColor] forKeyPath:@"_placeholderLabel.textColor"];
  1. 禁止橫屏 在AppDelegate中使用
 - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window  {  
     return UIInterfaceOrientationMaskPortrait;  
}

3、修改狀態(tài)欄顏色 (默認(rèn)黑色,修改為白色)

1. 在 Info.plist 中設(shè)置 UIViewControllerBasedStatusBarAppearance  為NO

2. 在需要改變狀態(tài)欄顏色的 AppDelegate 中在 didFinishLaunchingWithOptions 方法中增加: 
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

3.如果需要在單個(gè)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、強(qiáng)制橫屏代碼

- (BOOL)shouldAutorotate{
    //是否支持轉(zhuǎn)屏
    return NO;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
   //支持哪些轉(zhuǎn)屏方向
    return UIInterfaceOrientationMaskLandscape;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return UIInterfaceOrientationLandscapeRight;
}

- (BOOL)prefersStatusBarHidden{
    return NO;
}

6、在狀態(tài)欄顯示有網(wǎng)絡(luò)請(qǐng)求的提示器

  [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

7、相對(duì)路徑

    $(SRCROOT)/

8、視圖是否自動(dòng)(只是把第一個(gè)自動(dòng))向下挪64

 self.automaticallyAdjustsScrollViewInsets = NO; //不讓系統(tǒng)幫咱們把scrollView及其子類的視圖向下調(diào)整64

9、 隱藏手機(jī)的狀態(tài)欄

-(BOOL)prefersStatusBarHidden {
    return YES;
}

10、代理的安全保護(hù)【判斷是否有代理,和代理是否執(zhí)行了代理方法】

if (self.delegate && [self.delegate respondsToSelector:@selector(passValueWithArray:)]) {
    // make you codes
}

11、在ARC工程中導(dǎo)入MRC的類和在MRC工程中導(dǎo)入ARC的類

在ARC工程中導(dǎo)入MRC的類  我們選中工程->選中targets中的工程,然后選中Build Phases->在導(dǎo)入的類后邊加入標(biāo)記 -  fno-objc-arc

在MRC工程中導(dǎo)入ARC的類 路徑與上面一致,在該類后面加上標(biāo)記 -fobjc-arc

12、通過 2D 仿射函數(shù)實(shí)現(xiàn)小的動(dòng)畫效果(變大縮小) --可用于自定義pageControl 中

[UIView animateWithDuration:0.3 animations:^{
    imageView.transform = CGAffineTransformMakeScale(2, 2);
} completion:^(BOOL finished) {
    imageView.transform = CGAffineTransformMakeScale(1.0, 1.0);
}];

13、查看系統(tǒng)所有字體

for (id familyName in [UIFont familyNames]) {
    NSLog(@"%@", familyName);
    for (id fontName in [UIFont fontNamesForFamilyName:familyName])         
      NSLog(@"  %@", fontName);
}

14、判斷一個(gè)字符串是否為數(shù)字

NSCharacterSet *notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
if ([str rangeOfCharacterFromSet:notDigits].location == NSNotFound){// 是數(shù)字

} else {// 不是數(shù)字

}   

15、將一個(gè)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、讓一個(gè)view在父視圖中心

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

17、獲取當(dāng)前導(dǎo)航控制器下前一個(gè)控制器

- (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、判斷一個(gè)view是否為另一個(gè)view的子視圖

 //如果myView是self.view本身,也會(huì)返回yes
BOOL isSubView = [myView isDescendantOfView:self.view];

22、判斷一個(gè)字符串是否包含另一個(gè)字符串

// 方法一、這種方法只適用于iOS8之后,如果是配iOS8之前用方法二
if ([str containsString:otherStr]) NSLog(@"包含");

// 方法二
NSRange range = [str rangeOfString:otherStr];
if (range.location != NSNotFound) NSLog(@"包含");

23、判斷某一行的cell是否已經(jīng)顯示

CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
BOOL completelyVisible = CGRectContainsRect(tableView.bounds, cellRect);

24、讓導(dǎo)航控制器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) //默認(rèn)
else if(orientation == UIInterfaceOrientationPortrait)//豎屏
else if(orientation == UIInterfaceOrientationLandscapeLeft) // 左橫屏
else if(orientation == UIInterfaceOrientationLandscapeRight)//右橫屏

26、UIWebView添加單擊手勢(shì)不響應(yīng)

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(webViewClick)];
tap.delegate = self;
 [_webView addGestureRecognizer:tap];

// 因?yàn)閣ebView本身有一個(gè)單擊手勢(shì),所以再添加會(huì)造成手勢(shì)沖突,從而不響應(yīng)。需要綁定手勢(shì)代理,并實(shí)現(xiàn)下邊的代理方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}

27、獲取手機(jī)RAM容量

// 需要導(dǎo)入#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、地圖上兩個(gè)點(diǎn)之間的實(shí)際距離

// 需要導(dǎo)入#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、在應(yīng)用中打開設(shè)置的某個(gè)界面

// 打開設(shè)置->通用
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General"]];

// 以下是設(shè)置其他界面

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、監(jiān)聽scrollView是否滾動(dòng)到了頂部/底部

-(void)scrollViewDidScroll: (UIScrollView*)scrollView{
    float scrollViewHeight = scrollView.frame.size.height;
    float scrollContentSizeHeight = scrollView.contentSize.height;
    float scrollOffset = scrollView.contentOffset.y;

    if (scrollOffset == 0)
    {
        // 滾動(dòng)到了頂部
    }
    else if (scrollOffset + scrollViewHeight == scrollContentSizeHeight)
    {
        // 滾動(dòng)到了底部
    }
}

31、從導(dǎo)航控制器中刪除某個(gè)控制器

// 方法一、知道這個(gè)控制器所處的導(dǎo)航控制器下標(biāo)
NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
[navigationArray removeObjectAtIndex: 2]; 
self.navigationController.viewControllers = navigationArray;

// 方法二、知道具體是哪個(gè)控制器
NSArray* tempVCA = [self.navigationController viewControllers];
for(UIViewController *tempVC in tempVCA){
    if([tempVC isKindOfClass:[urViewControllerClass class]])
    {
        [tempVC removeFromParentViewController];
    }
}

32、觸摸事件類型

UIControlEventTouchCancel 取消控件當(dāng)前觸發(fā)的事件
UIControlEventTouchDown 點(diǎn)按下去的事件
UIControlEventTouchDownRepeat 重復(fù)的觸動(dòng)事件
UIControlEventTouchDragEnter 手指被拖動(dòng)到控件的邊界的事件
UIControlEventTouchDragExit 一個(gè)手指從控件內(nèi)拖到外界的事件
UIControlEventTouchDragInside 手指在控件的邊界內(nèi)拖動(dòng)的事件
UIControlEventTouchDragOutside 手指在控件邊界之外被拖動(dòng)的事件
UIControlEventTouchUpInside 手指處于控制范圍內(nèi)的觸摸事件
UIControlEventTouchUpOutside 手指超出控制范圍的控制中的觸摸事件

33、比較兩個(gè)UIImage是否相等

- (BOOL)image:(UIImage *)image1 isEqualTo:(UIImage *)image2{
    NSData *data1 = UIImagePNGRepresentation(image1);
    NSData *data2 = UIImagePNGRepresentation(image2);

    return [data1 isEqual:data2];
}

34、代碼方式調(diào)整屏幕亮度

// brightness屬性值在0-1之間,0代表最小亮度,1代表最大亮度
[[UIScreen mainScreen] setBrightness:0.5];

35、根據(jù)經(jīng)緯度獲取城市等信息

// 創(chuàng)建經(jīng)緯度
CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
//創(chuàng)建一個(gè)譯碼器
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);
    // 區(qū)
    NSLog(@"subLocality,%@",place.subLocality); 
    // 國(guó)家
    NSLog(@"country,%@",place.country);
    }
}];

36、如何防止添加多個(gè)NSNotification觀察者?

// 解決方案就是添加觀察者之前先移除下這個(gè)觀察者
[[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、獲取字符串中的數(shù)字

- (NSString *)getNumberFromStr:(NSString *)str{
     NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
     return [[str componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""];
}

39、為UIView的某個(gè)方向添加邊框

    - (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、自動(dòng)搜索功能,用戶連續(xù)輸入的時(shí)候不搜索,用戶停止輸入的時(shí)候自動(dòng)搜索(我這里設(shè)置的是0.5s,可根據(jù)需求更改)

// 輸入框文字改變的時(shí)候調(diào)用
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
// 先取消調(diào)用搜索方法
 [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(searchNewResult) object:nil];
// 0.5秒后調(diào)用搜索方法
 [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、動(dòng)畫執(zhí)行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獲取一個(gè)類所有屬性

- (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跳轉(zhuǎn)動(dòng)畫像modal跳轉(zhuǎn)動(dòng)畫那樣效果(從下往上推上來)

- (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];
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、改變 UITextField 占位文字 顏色和去掉底部白框 [_userName setValue:[UICo...
    i_MT閱讀 1,195評(píng)論 0 2
  • 1、設(shè)置UILabel行間距 NSMutableAttributedString* attrString = [[...
    十年一品溫如言1008閱讀 2,048評(píng)論 0 3
  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,222評(píng)論 3 119
  • 姆媽經(jīng)常和我們講要注意身體。 姆媽交代大姐、弟弟和我,正當(dāng)出汗時(shí)候不要亂減衣服,待汗稍止氣出定再脫衣;不要坐在窗口...
    不夜侯閱讀 547評(píng)論 0 3
  • 初見繾綣 恍若舊識(shí) 那絲線纏繞一般 情愫 怎可隨意用卻 直到 攜手走過一個(gè)個(gè) 春夏又秋冬 彼此的溫度 已經(jīng)互相滲透...
    海芝昕閱讀 287評(píng)論 1 2

友情鏈接更多精彩內(nèi)容