<熊貓車幫教練>項(xiàng)目總結(jié)

自己總結(jié),歡迎指正,不喜勿噴

2017.03.05-2017.05.23

1.融云獲取最后一條消息的內(nèi)容

RCConversation *conversation = [[RCIMClient sharedRCIMClient]getConversation:ConversationType_PRIVATE targetId:[NSString stringWithFormat:@"%lu",(long)model.trainee_id]];
    if ([conversation.senderUserId isEqualToString:[[RCIM sharedRCIM]currentUserInfo].userId]) {
        cell.timeLabel.text = [self timestampConversionDate:conversation.sentTime/1000];
    }else {
        if (conversation.receivedTime != 0) {
            cell.timeLabel.text = [self timestampConversionDate:conversation.receivedTime/1000];
        }else {
            cell.timeLabel.text = @"00:00";
        }
    }
    if (conversation.unreadMessageCount > 0) {
        cell.statusView.hidden = NO;
    }else {
        cell.statusView.hidden = YES;
    }
    if ([conversation.lastestMessage isKindOfClass:[RCTextMessage class]]) {
        cell.contentLabel.text =((RCTextMessage *)conversation.lastestMessage).content;
    }else if ([conversation.lastestMessage isMemberOfClass:[RCVoiceMessage class]]) {
        cell.contentLabel.text = @"[語(yǔ)音]";
    }else if([conversation.lastestMessage isMemberOfClass:[RCLocationMessage class]]) {
        cell.contentLabel.text =((RCLocationMessage *)conversation.lastestMessage).locationName;
    }else if([conversation.lastestMessage isMemberOfClass:[RCImageMessage class]]) {
        cell.contentLabel.text = @"[圖片]";
    }else {
        cell.contentLabel.text = @"暫無(wú)聊天信息";
    }

2.與Android對(duì)接是需帶上用戶信息

///連接融云
- (void) rongCloudSetting {
    NSString *token = [[NSUserDefaults standardUserDefaults]objectForKey:k_Rong_Token];
    [[RCIM sharedRCIM] connectWithToken:token success:^(NSString *userId) {
        NSLog(@"***登錄成功");
        RCUserInfo *userinfo = [[RCUserInfo alloc]initWithUserId:[RCIM sharedRCIM].currentUserInfo.userId name: [[NSUserDefaults standardUserDefaults] objectForKey:k_User_Name] portrait:[[NSUserDefaults standardUserDefaults] objectForKey:k_User_HeadImage]];
        [[RCIM sharedRCIM] setCurrentUserInfo:userinfo];
        [[RCIM sharedRCIM] setEnableMessageAttachUserInfo:YES];
    } error:^(RCConnectErrorCode status) {
        NSLog(@"***登錄失敗");
    } tokenIncorrect:^{
        NSLog(@"token過(guò)期或不正確");
    }];
}

3.提交數(shù)據(jù)時(shí)主window蒙一層防重點(diǎn)

//FactoryClass為自己定義的工廠類
- (void) addFaceViewSetting {
    UIWindow *keywindow = [[UIApplication sharedApplication] keyWindow];
    self.loadBgView = [FactoryClass CreateView:0 Rounded:0 ToView:keywindow];
    self.loadBgView.backgroundColor  = [UIColor colorWithWhite:0 alpha:0.25];
    [self.loadBgView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.right.top.equalTo(keywindow);
        make.bottom.equalTo(keywindow);
    }];
    self.loadBgView.hidden = YES;
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapNoClickEvent)];
    tap.delegate = self;
    [self.loadBgView addGestureRecognizer:tap];
}

4. 比較時(shí)間

- (NSInteger) compareStr:(NSString *)timeStr{
    if (timeStr.length < 22) {
        return -2;
    }
    NSString *dayStr = [timeStr substringToIndex:10];
    NSString *hourOneStr = [timeStr substringToIndex:16];
    NSString *hourStr = [timeStr substringFromIndex:timeStr.length - 5];
    NSString *houTwoStr = [NSString stringWithFormat:@"%@ %@",dayStr,hourStr];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
    NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];
    NSDate *dateA = [dateFormatter dateFromString:hourOneStr];
    NSDate *dateB = [dateFormatter dateFromString:houTwoStr];
    NSDate *dateC = [dateFormatter dateFromString:currentDateStr];
    NSComparisonResult result_1 = [dateC compare:dateA];
    NSComparisonResult result_2 = [dateC compare:dateB];
    //相等
    if (result_1 == NSOrderedAscending) {
        return -1;
    }
    //在某個(gè)時(shí)間段內(nèi)
    if ((result_1 == NSOrderedDescending || result_1 == NSOrderedSame)&&(result_2 == NSOrderedAscending || result_2 == NSOrderedSame)) {
        return 0;
    }
    //超過(guò)了某個(gè)時(shí)間
    else if (result_2 == NSOrderedDescending){
        return 1;
    }
    return -2;
}

5.高級(jí)控件控制其某類cell是否可以被點(diǎn)擊

//開啟高級(jí)控件的多選
self.collectionView.allowsMultipleSelection = YES;
//是否可以被點(diǎn)擊
if (schedule.order == -1) {
                cell.userInteractionEnabled = NO;
                cell.bgView.backgroundColor = [UIColor colorWithRGB:color(FFFFFF)];
            }else if(schedule.order == -2) {
                cell.userInteractionEnabled = YES;
                cell.bgView.backgroundColor = [UIColor colorWithRGB:color(FFB300)];
            }else if(schedule.order == 0) {
                cell.userInteractionEnabled = YES;
                cell.bgView.backgroundColor = [UIColor colorWithRGB:color(65C66E)];
            }else if(schedule.order > 0) {
                cell.userInteractionEnabled = YES;
                cell.bgView.backgroundColor = [UIColor colorWithRGB:[UIColor colorWithMain]];
            }else {
                cell.userInteractionEnabled = NO;
                cell.bgView.backgroundColor = [UIColor colorWithRGB:color(FFFFFF)];
            }
 }

6.創(chuàng)建帶有圖片的富文本

- (NSAttributedString *) insertImageWithLabel:(NSString *)imageName Text:(NSString *)text {
    // 創(chuàng)建一個(gè)富文本
    NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ ",text]];
    [attri addAttributes:@{NSForegroundColorAttributeName:[UIColor colorWithRGB:[UIColor colorWithMain]]} range:NSMakeRange(0, attri.length)];
    // 添加表情
    NSTextAttachment *attch = [[NSTextAttachment alloc] init];
    // 表情圖片
    attch.image = [UIImage imageNamed:imageName];
    // 設(shè)置圖片大小
    attch.bounds = CGRectMake(0, 0, Size(16), Size(30));
    // 創(chuàng)建帶有圖片的富文本
    NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:attch];
    [attri insertAttributedString:string atIndex:attri.length];
    //返回
    return attri;
}

7. 時(shí)間字符串轉(zhuǎn)某種格式

///NSString轉(zhuǎn)NSDate
- (NSDictionary *) stringConverseDate:(NSString *)dateStr {
    if (dateStr == nil) {
        return nil;
    }
    //需要轉(zhuǎn)換的字符串
    NSString *dateString = dateStr;
    //設(shè)置轉(zhuǎn)換格式
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ;
    [formatter setDateFormat:@"yyyy-MM-dd"];
    //NSString轉(zhuǎn)NSDate
    NSDate *date=[formatter dateFromString:dateString];
    
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"EEE"];
    NSString *weekStr = [dateFormat stringFromDate:date];
    [dateFormat setDateFormat:@"MM-dd"];
    NSString *dayStr = [dateFormat stringFromDate:date];
    if (weekStr == nil || dayStr == nil) {
        return nil;
    }
    
    //判斷當(dāng)前手機(jī)系統(tǒng)的語(yǔ)言選擇
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
    NSString *currentLanguage = [languages objectAtIndex:0];
    if ([currentLanguage isEqualToString:@"zh_Hans"]) {
        NSString *weekRstr = [NSString stringWithFormat:@"周%@",[weekStr substringFromIndex:weekStr.length-1]];
        return [[NSDictionary alloc]initWithObjectsAndKeys:weekRstr,@"Week",dayStr,@"MandD", nil];
    }else {
        return [[NSDictionary alloc]initWithObjectsAndKeys:weekStr,@"Week",dayStr,@"MandD", nil];
    }
}

8.移除鍵盤通知和定時(shí)器

- (void)dealloc {
    [self.codeTimer invalidate];
    self.codeTimer = nil;
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];
}

9.限制輸入框的輸入長(zhǎng)度和限制輸入字符

#pragma mark - UITextFieldDeledate 
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    if (textField == self.phoneTextField) {
        if (toBeString.length > 11) {
            return NO;
        }
    }
    if (textField == self.codeTextField) {
        if (toBeString.length > 6) {
            return NO;
        }
    }
    if (textField == self.passwordTextField) {
        if (toBeString.length > 22) {
            return NO;
        }
    }
    if (textField == self.againPasswordTextField) {
        if (toBeString.length > 22) {
            return NO;
        }
    }
    //如果輸入的字符串不滿足某種格式就不能輸入
    if (![YFWLValidationMessage checkUserName:((UITextField *)self.textFieldArray[0]).text]) {
        [YFWLHUDManager showInfoMessage:@"姓名格式錯(cuò)誤" duration:1.3];
        return NO;
    }
    return YES;
}

10.正則匹配手機(jī)號(hào)、身份證、密碼和銀行卡等格式

#pragma 正則匹配手機(jī)號(hào)
+ (BOOL)checkTelNumber:(NSString *) telNumber
{
    NSString *pattern = @"^1+[3578]+\\d{9}";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
    BOOL isMatch = [pred evaluateWithObject:telNumber];
    return isMatch;
}

#pragma 正則匹配用戶密碼6-22位數(shù)字和字母組合
+ (BOOL)checkPassword:(NSString *) password
{
    NSString *pattern = @"^(?![0-9]+$)[a-zA-Z0-9]{6,22}";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
    BOOL isMatch = [pred evaluateWithObject:password];
    return isMatch;
    
}

#pragma 正則匹配用戶姓名,20位的中文或英文
+ (BOOL)checkUserName : (NSString *) userName
{
    NSString *pattern = @"^[a-zA-Z\u4E00-\u9FA5]{1,20}";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
    BOOL isMatch = [pred evaluateWithObject:userName];
    return isMatch;
}

#pragma 正則匹配用戶身份證號(hào)15或18位
+ (BOOL)checkUserIdCard: (NSString *) idCard
{
    NSString *pattern = @"(^[0-9]{15}$)|([0-9]{17}([0-9]|X)$)";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
    BOOL isMatch = [pred evaluateWithObject:idCard];
    return isMatch;
}

#pragma 正則驗(yàn)證碼,6位的數(shù)字
+ (BOOL)checkEmployeeNumber : (NSString *) number
{
    NSString *pattern = @"^[0-9]{6}";
    
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
    BOOL isMatch = [pred evaluateWithObject:number];
    return isMatch;
}

#pragma 正則匹配URL
+ (BOOL)checkURL : (NSString *) url
{
    NSString *pattern = @"^[0-9A-Za-z]{1,50}";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
    BOOL isMatch = [pred evaluateWithObject:url];
    return isMatch;
}

#pragma 匹配銀行卡
+ (BOOL) IsBankCard:(NSString *)cardNumber
{
    if(cardNumber.length==0)
    {
        return NO;
    }
    NSString *digitsOnly = @"";
    char c;
    for (int i = 0; i < cardNumber.length; i++)
    {
        c = [cardNumber characterAtIndex:i];
        if (isdigit(c))
        {
            digitsOnly =[digitsOnly stringByAppendingFormat:@"%c",c];
        }
    }
    int sum = 0;
    int digit = 0;
    int addend = 0;
    BOOL timesTwo = false;
    for (NSInteger i = digitsOnly.length - 1; i >= 0; i--)
    {
        digit = [digitsOnly characterAtIndex:i] - '0';
        if (timesTwo)
        {
            addend = digit * 2;
            if (addend > 9) {
                addend -= 9;
            }
        }
        else {
            addend = digit;
        }
        sum += addend;
        timesTwo = !timesTwo;
    }
    int modulus = sum % 10;
    return modulus == 0;
}

11.判斷手機(jī)當(dāng)前類型

//創(chuàng)建方法:給UIDevice建立類別并導(dǎo)入這個(gè)頭文件#import <sys/utsname.h> 如:@implementation UIDevice (YFWLGetDevice)
//使用方法: [UIDevice deviceModelName];//直接返回當(dāng)前的手機(jī)類型

+ (NSString*)deviceModelName
{
    struct utsname systemInfo;
    uname(&systemInfo);
    NSString *deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
    
    //iPhone 系列
    if ([deviceModel isEqualToString:@"iPhone1,1"])    return @"iPhone 1G";
    if ([deviceModel isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";
    if ([deviceModel isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";
    if ([deviceModel isEqualToString:@"iPhone3,1"])    return @"iPhone 4";
    if ([deviceModel isEqualToString:@"iPhone3,2"])    return @"iPhone 4";
    if ([deviceModel isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([deviceModel isEqualToString:@"iPhone5,1"])    return @"iPhone 5";
    if ([deviceModel isEqualToString:@"iPhone5,2"])    return @"iPhone 5";
    if ([deviceModel isEqualToString:@"iPhone5,3"])    return @"iPhone 5C";
    if ([deviceModel isEqualToString:@"iPhone5,4"])    return @"iPhone 5C";
    if ([deviceModel isEqualToString:@"iPhone6,1"])    return @"iPhone 5S";
    if ([deviceModel isEqualToString:@"iPhone6,2"])    return @"iPhone 5S";
    if ([deviceModel isEqualToString:@"iPhone7,1"])    return @"iPhone6 Plus";
    if ([deviceModel isEqualToString:@"iPhone7,2"])    return @"iPhone6";
    if ([deviceModel isEqualToString:@"iPhone8,1"])    return @"iPhone6s";
    if ([deviceModel isEqualToString:@"iPhone8,2"])    return @"iPhone6s Plus";
    if ([deviceModel isEqualToString:@"iPhone9,1"])    return @"iPhone7 (CDMA)";
    if ([deviceModel isEqualToString:@"iPhone9,3"])    return @"iPhone7 (GSM)";
    if ([deviceModel isEqualToString:@"iPhone9,2"])    return @"iPhone7 Plus (CDMA)";
    if ([deviceModel isEqualToString:@"iPhone9,4"])    return @"iPhone7 Plus (GSM)";
    
    //iPod 系列
    if ([deviceModel isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";
    if ([deviceModel isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";
    if ([deviceModel isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";
    if ([deviceModel isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";
    if ([deviceModel isEqualToString:@"iPod5,1"])      return @"iPod Touch 5G";
    
    //iPad 系列
    if ([deviceModel isEqualToString:@"iPad1,1"])      return @"iPad";
    if ([deviceModel isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";
    if ([deviceModel isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";
    if ([deviceModel isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";
    if ([deviceModel isEqualToString:@"iPad2,4"])      return @"iPad 2 (32nm)";
    if ([deviceModel isEqualToString:@"iPad2,5"])      return @"iPad mini (WiFi)";
    if ([deviceModel isEqualToString:@"iPad2,6"])      return @"iPad mini (GSM)";
    if ([deviceModel isEqualToString:@"iPad2,7"])      return @"iPad mini (CDMA)";
    
    if ([deviceModel isEqualToString:@"iPad3,1"])      return @"iPad 3(WiFi)";
    if ([deviceModel isEqualToString:@"iPad3,2"])      return @"iPad 3(CDMA)";
    if ([deviceModel isEqualToString:@"iPad3,3"])      return @"iPad 3(4G)";
    if ([deviceModel isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";
    if ([deviceModel isEqualToString:@"iPad3,5"])      return @"iPad 4 (4G)";
    if ([deviceModel isEqualToString:@"iPad3,6"])      return @"iPad 4 (CDMA)";
    
    if ([deviceModel isEqualToString:@"iPad4,1"])      return @"iPad Air";
    if ([deviceModel isEqualToString:@"iPad4,2"])      return @"iPad Air";
    if ([deviceModel isEqualToString:@"iPad4,3"])      return @"iPad Air";
    if ([deviceModel isEqualToString:@"iPad5,3"])      return @"iPad Air 2";
    if ([deviceModel isEqualToString:@"iPad5,4"])      return @"iPad Air 2";
    if ([deviceModel isEqualToString:@"i386"])         return @"Simulator";
    if ([deviceModel isEqualToString:@"x86_64"])       return @"Simulator";
    
    if ([deviceModel isEqualToString:@"iPad4,4"]
        ||[deviceModel isEqualToString:@"iPad4,5"]
        ||[deviceModel isEqualToString:@"iPad4,6"])      return @"iPad mini 2";
    
    if ([deviceModel isEqualToString:@"iPad4,7"]
        ||[deviceModel isEqualToString:@"iPad4,8"]
        ||[deviceModel isEqualToString:@"iPad4,9"])      return @"iPad mini 3";
    
    return deviceModel;
}

12.自己解析字符串?dāng)?shù)組

格式: @"["B1","B2","C1","C2"]"

- (void) loadDataFouncation {
    NSMutableString *strMu = [[NSMutableString alloc]init];
    if (self.isSelectCars) {
        NSString *string = [[NSUserDefaults standardUserDefaults]objectForKey:k_Car_Style];
        strMu = [[NSMutableString alloc]initWithString:string];
    }else {
        NSString *string = [[NSUserDefaults standardUserDefaults]objectForKey:k_License_Style];
        strMu = [[NSMutableString alloc]initWithString:string];
    }
    [strMu replaceOccurrencesOfString:@"[" withString:@"" options:0 range:NSMakeRange(0, strMu.length)];
    [strMu replaceOccurrencesOfString:@"\"" withString:@"" options:0 range:NSMakeRange(0, strMu.length)];
    [strMu replaceOccurrencesOfString:@"]" withString:@"" options:0 range:NSMakeRange(0, strMu.length)];
    NSArray *arrTemp = [strMu componentsSeparatedByString:@","];
    [arrTemp enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        [self.dataArray addObject:obj];
    }];
    [self.collectionView reloadData];
}

13.點(diǎn)擊縮略圖放大圖片

創(chuàng)建方法:創(chuàng)建一個(gè)NSObject類,將此代碼拷貝到.m文件中,.h中申明兩個(gè)類方法
使用方法:[類名 scanBigImageWithImageArray:圖片數(shù)組 CurrentIndex:當(dāng)前下標(biāo)];

//原始尺寸
static CGRect oldframe;

/**
 *  瀏覽單張大圖
 *
 *  @param currentImageview 圖片所在的imageView
 */
+(void)scanBigImageWithImageView:(UIImageView *)currentImageview{
    //當(dāng)前imageview的圖片
    UIImage *image = currentImageview.image;
    //當(dāng)前視圖
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    //背景
    UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
    //當(dāng)前imageview的原始尺寸->將像素currentImageview.bounds由currentImageview.bounds所在視圖轉(zhuǎn)換到目標(biāo)視圖window中,返回在目標(biāo)視圖window中的像素值
    oldframe = [currentImageview convertRect:currentImageview.bounds toView:window];
    [backgroundView setBackgroundColor:[UIColor colorWithRGB:color(000000)]];
    //此時(shí)視圖不會(huì)顯示
    [backgroundView setAlpha:0];
    //將所展示的imageView重新繪制在Window中
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:oldframe];
    [imageView setImage:image];
    [imageView setTag:0];
    [backgroundView addSubview:imageView];
    //將原始視圖添加到背景視圖中
    [window addSubview:backgroundView];
    
    
    //添加點(diǎn)擊事件同樣是類方法 -> 作用是再次點(diǎn)擊回到初始大小
    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideImageView:)];
    [backgroundView addGestureRecognizer:tapGestureRecognizer];
    
    //動(dòng)畫放大所展示的ImageView
    
    [UIView animateWithDuration:0.4 animations:^{
        CGFloat y,width,height;
        y = ([UIScreen mainScreen].bounds.size.height - image.size.height * [UIScreen mainScreen].bounds.size.width / image.size.width) * 0.5;
        //寬度為屏幕寬度
        width = [UIScreen mainScreen].bounds.size.width;
        //高度 根據(jù)圖片寬高比設(shè)置
        height = image.size.height * [UIScreen mainScreen].bounds.size.width / image.size.width;
        [imageView setFrame:CGRectMake(0, y, width, height)];
        //重要! 將視圖顯示出來(lái)
        [backgroundView setAlpha:1];
    } completion:^(BOOL finished) {
        
    }];
    
}

/**
 *  瀏覽數(shù)組大圖,并帶偏移量
 *
 *  @param currentImageArray 圖片所在的imageView
 */
+(void)scanBigImageWithImageArray:(NSMutableArray *)currentImageArray CurrentIndex:(NSInteger)currentIndex {
    //當(dāng)前視圖
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    //背景
    UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
    [backgroundView setBackgroundColor:[UIColor colorWithRGB:color(000000)]];
    //此時(shí)視圖不會(huì)顯示
    [backgroundView setAlpha:0];
    
    UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:backgroundView.bounds];
    scrollView.pagingEnabled = YES;
    scrollView.showsVerticalScrollIndicator = NO;
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.bounces = NO;
    scrollView.scrollEnabled = YES;
    scrollView.contentSize = CGSizeMake(kMainScreenWidth * currentImageArray.count, kMainScreenHeight);
    [backgroundView addSubview:scrollView];
    
    
    for (NSInteger i = 0; i < currentImageArray.count; i++) {
        NSString *currentURL = currentImageArray[i];
        UIImageView *currentImageview = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, kMainScreenWidth, kMainScreenHeight)];
        [currentImageview sd_setImageWithURL:[NSURL URLWithString:currentURL] placeholderImage:[UIImage imageNamed:@"banner"]];
        currentImageview.contentMode = UIViewContentModeScaleAspectFit;
        currentImageview.origin = CGPointMake(kMainScreenWidth * i, 0);
        currentImageview.centerY = scrollView.centerY;
        [scrollView addSubview:currentImageview];
    }
    
    scrollView.contentOffset = CGPointMake(kMainScreenWidth*currentIndex, 0);
    
    //將原始視圖添加到背景視圖中
    [window addSubview:backgroundView];
    
    
    //添加點(diǎn)擊事件同樣是類方法 -> 作用是再次點(diǎn)擊回到初始大小
    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideImageView:)];
    [backgroundView addGestureRecognizer:tapGestureRecognizer];
    
    //動(dòng)畫放大所展示的ImageView
    [UIView animateWithDuration:0.4 animations:^{
        [backgroundView setAlpha:1];
    } completion:^(BOOL finished) {
        
    }];
    
}

/**
 *  恢復(fù)imageView原始尺寸
 *
 *  @param tap 點(diǎn)擊事件
 */
+(void)hideImageView:(UITapGestureRecognizer *)tap{
    UIView *backgroundView = tap.view;
    //原始imageview
    UIImageView *imageView = [tap.view viewWithTag:0];
    //恢復(fù)
    [UIView animateWithDuration:0.2 animations:^{
        [imageView setFrame:oldframe];
        [backgroundView setAlpha:0];
    } completion:^(BOOL finished) {
        //完成后操作->將背景視圖刪掉
        [backgroundView removeFromSuperview];
    }];
}

14.給UIColor添加類別

使用實(shí)例:
///導(dǎo)航欄的顏色值
+ (UIColor *)colorWithNavigationBar {
    return [UIColor colorWithRGB:color(CB3340)];
}

#pragma 十六進(jìn)制轉(zhuǎn)RGB值
+ (UIColor *)colorWithRGB:(uint32_t)rgbValue {
    return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16) / 255.0f
                           green:((rgbValue & 0xFF00) >> 8) / 255.0f
                            blue:(rgbValue & 0xFF) / 255.0f
                           alpha:1];
}
#pragma 十六進(jìn)制轉(zhuǎn)RGBA值
+ (UIColor *)colorWithRGBA:(uint32_t)rgbaValue {
    return [UIColor colorWithRed:((rgbaValue & 0xFF000000) >> 24) / 255.0f
                           green:((rgbaValue & 0xFF0000) >> 16) / 255.0f
                            blue:((rgbaValue & 0xFF00) >> 8) / 255.0f
                           alpha:(rgbaValue & 0xFF) / 255.0f];
}
#pragma 十六進(jìn)制轉(zhuǎn)RGBA值
+ (UIColor *)colorWithRGB:(uint32_t)rgbValue alpha:(CGFloat)alpha {
    return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16) / 255.0f
                           green:((rgbValue & 0xFF00) >> 8) / 255.0f
                            blue:(rgbValue & 0xFF) / 255.0f
                           alpha:alpha];
}
最后編輯于
?著作權(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)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,825評(píng)論 25 709
  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,667評(píng)論 0 4
  • 《說(shuō)苑》,是一部古代雜史集,由西漢著名的經(jīng)學(xué)家、文學(xué)家、目錄學(xué)家劉向編纂。 《說(shuō)苑》共20卷,計(jì)為:君道、臣術(shù)、建...
    金櫻子閱讀 3,104評(píng)論 0 1
  • 說(shuō)點(diǎn)題外話 本文僅僅適用于新手,我是說(shuō)很新的手喲,旨在和大家共同了解js的call和apply方法。筆者水平有限,...
    碼農(nóng)小圈圈閱讀 650評(píng)論 4 4

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