iOS新手很痛苦函喉?也許這些可以幫你

leading1.gif
// 如果是第一次安裝打開(kāi)App --- 顯示引導(dǎo)頁(yè)面
    ZJLeadingPageController *leadController = [[ZJLeadingPageController alloc] initWithPagesCount:5 setupCellHandler:^(ZJLeadingPageCell *cell, NSIndexPath *indexPath) {
        
        // 設(shè)置圖片
        NSString *imageName = [NSString stringWithFormat:@"wangyiyun%ld",indexPath.row];
        cell.imageView.image = [UIImage imageNamed:imageName];

        // 設(shè)置按鈕屬性
        [cell.finishBtn setTitle:@"立即體驗(yàn)" forState:UIControlStateNormal];
        [cell.finishBtn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
        
    } finishHandler:^(UIButton *finishBtn) {
        NSLog(@"點(diǎn)擊了完成按鈕-----");
    }];
    // 自定義屬性
    leadController.pageControl.pageIndicatorTintColor = [UIColor yellowColor];
    leadController.pageControl.currentPageIndicatorTintColor = [UIColor purpleColor];
launch.gif
ZJLaunchAdController *launchVc = [[ZJLaunchAdController alloc] initWithLaunchImage:nil setAdImageHandler:^(UIImageView *imageView) {
        // 這里可以直接使用SDWebimage等來(lái)請(qǐng)求服務(wù)器提供的廣告圖片(SDWebimage會(huì)處理好gif圖片的顯示)
        // 不過(guò)你需要注意選擇SDWebimage的緩存策略
        imageView.image = [UIImage imageNamed:@"adImage"];
        
    } finishHandler:^(ZJLaunchAdCallbackType callbackType) {
        switch (callbackType) {
            case ZJLaunchAdCallbackTypeClickAd:
                // 點(diǎn)擊了廣告, 展示相應(yīng)的廣告即可
                NSLog(@"點(diǎn)擊了廣告, 展示相應(yīng)的廣告即可");
                
                break;
            case ZJLaunchAdCallbackTypeShowFinish:
                NSLog(@"展示廣告圖片結(jié)束, 可以進(jìn)入App");

                break;
            case ZJLaunchAdCallbackTypeClickSkipBtn:
                NSLog(@"點(diǎn)擊了跳過(guò)廣告, 可以進(jìn)入App");

                break;
        }
    }];
  • ZJPPTView 可以玩出花樣的輪播器, 內(nèi)部不依賴第三方庫(kù), 使用簡(jiǎn)單, 可自定義輪播任何內(nèi)容. 圖片加載等類似tableView使用代理加載, 可自己選擇第三方庫(kù)來(lái)加載圖片等.
ppt.gif
    _defaultPPT = [[ZJPPTViewDefault alloc] initWithDelegate:self];
    _defaultPPT.pageControlPositon = ZJPPTViewPageControlPositionBottomCenter;
    - (void)pptView:(ZJPPTViewOC *)pptView setUpPageCell:(UICollectionViewCell *)cell withIndex:(NSInteger)index {
        if (pptView == _defaultPPT) {
            ZJPPTViewDefaultCell *defaultCell = (ZJPPTViewDefaultCell *)cell;
            // 可自定義文字屬性 ...
            //    defaultCell.textLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
            //    defaultCell.textLabel.textAlignment = NSTextAlignmentCenter;
            //    defaultCell.textLabel.textColor = [UIColor whiteColor];
            defaultCell.textLabel.text = [NSString stringWithFormat:@"      這是第: %ld 頁(yè)", index];
            // 設(shè)置圖片  網(wǎng)絡(luò)圖片, 可自由使用SDWebimage等來(lái)加載
            if (index%2 == 0) {
                UIImage *image = [UIImage imageNamed:@"1"];
                defaultCell.imageView.image = image;
            }
            else {
                UIImage *image = [UIImage imageNamed:@"2"];
                defaultCell.imageView.image = image;
            }
            
        }
    }
progressHUD.gif
 // 顯示加載成功的圖片和文字提示, 1s后自動(dòng)隱藏
            [ZJProgressHUD showSuccessWithStatus:@"加載成功!!" andAutoHideAfterTime:1.f];
            // 顯示加載動(dòng)畫, 需要加載完成后調(diào)用hideHUD隱藏
            [ZJProgressHUD showProgressWithStatus:@"正在努力加載中..."];
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                // 加載完后 移除提示框
                [ZJProgressHUD hideHUD];
            });
  • ZJActionSheet 自定義UIActionSheet, 系統(tǒng)的UIActionSheet用著很不方便自定義, 比如修改文字的顏色, 大小, 以及顯示圖片等很不方便, 那么我們可以自己寫一個(gè), 然后類似下面這樣的效果.
actionSheet.gif
  ZJActionSheetItem *item8 = [[ZJActionSheetItem alloc] initWithTitle:@"可以自定義所有item的字體顏色 大小等" image:nil handler:^(ZJActionSheetView *actionSheet) {
        NSLog(@"點(diǎn)擊了收藏");
    }];
    ZJActionSheetItem *item9 = [[ZJActionSheetItem alloc] initWithTitle:@"可以設(shè)置actionSheet居中或者居下顯示" image:nil handler:^(ZJActionSheetView *actionSheet) {
        NSLog(@"點(diǎn)擊了收藏");
    }];

    ZJActionSheetView *actionSheet = [[ZJActionSheetView alloc] initWithTitle:@"這是提示title" subtitle:@"這是詳細(xì)說(shuō)明文字,字體默認(rèn)14,可修改subtitleLabel" actionSheetItems:@[item1, item2, item3,item4,item5,item6,item7,item8,item9]];
    // 顯示
    [actionSheet show];
circleProgress.gif
self.progressView = [[ZJCircleProgressView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
// 背景色
self.progressView.trackBackgroundColor = [UIColor yellowColor];
// 進(jìn)度顏色
self.progressView.trackColor = [UIColor greenColor];
self.progressView.headerImage = [self drawImage];
// 開(kāi)始角度位置
//    self.progressView.beginAngle =
// 自定義progressLabel的屬性...
self.progressView.progressLabel.textColor = [UIColor lightGrayColor];
//    self.progressView.progressLabel.hidden = YES;
[self.view addSubview:self.progressView];

- (IBAction)slide:(id)sender {
    UISlider *slider = (UISlider *)sender;
    // 改變進(jìn)度
    self.progressView.progress = slider.value;
    self.pieProgressView.progress = slider.value;

}
contacts.gif
 NSArray *testArray = @[@"ZeroJ", @"曾晶", @"你好", @"曾晶", @"曾晶" , @"曾晶" , @"曾晶" , @"曾晶" , @"曾晶" , @"曾晶" , @"曾晶",  @"曾好", @"李涵", @"王丹", @"良好", @"124"];
    
    NSMutableArray *contacts = [NSMutableArray arrayWithCapacity:testArray.count];
    for (NSString *name in testArray) {
        ZJContact *test = [ZJContact new];
        test.name = name;
        test.icon = [UIImage imageNamed:@"icon"];
        [contacts addObject:test];
    }

    [self setupInitialAllDataArrayWithContacts:contacts];
citySelecte.gif
    ZJCityViewControllerOne *vc = [[ZJCityViewControllerOne alloc] initWithDataArray:nil];
//    __weak typeof(self) weakSelf = self;
    [vc setupCityCellClickHandler:^(NSString *title) {
        
        NSLog(@"選中的城市是: %@", title);
        [ZJProgressHUD showStatus:[NSString stringWithFormat:@"選中的城市是: %@", title] andAutoHideAfterTime:1.f];
//        [weakSelf.navigationController popViewControllerAnimated:YES];
    }];
    [self.navigationController showViewController:vc sender:nil];
pickerView.gif
          [ZJUsefulPickerView showSingleColPickerWithToolBarText:@"單列數(shù)據(jù)" withData:@[@"objective-C", @"swift", @"iOS", @"iPad", @"iPod", @"mac", @"java", @"php", @"JavaScript"] withDefaultIndex:3 withCancelHandler:^{
                NSLog(@"quxiaole -----");
                
            } withDoneHandler:^(NSInteger selectedIndex, NSString *selectedValue) {
                NSLog(@"%@---%ld", selectedValue, selectedIndex);
                
            }];
            
            // 省市區(qū)選擇
            [ZJUsefulPickerView showCitiesPickerWithToolBarText:@"省市區(qū)選擇" withDefaultSelectedValues:@[@"四川", @"成都", @"郫縣"] withCancelHandler:^{
                NSLog(@"quxiaole -----");

            } withDoneHandler:^(NSArray *selectedValues) {
                NSLog(@"%@---", selectedValues);

            }];
drawer1.gif
drawer2.gif
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ZJLeftViewController *left = [ZJLeftViewController new];
    
    ZJCenterViewController *center = [ZJCenterViewController new];
    
    UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:center];
    
    ZJRightViewController *right = [ZJRightViewController new];
    
    ZJDrawerController *drawer = [[ZJDrawerController alloc] initWithLeftController: left centerController:navi rightController:right];
    
    // 背景圖片
    drawer.backgroundImage = [UIImage imageNamed:@"1"];
    // 動(dòng)畫類型
    drawer.drawerControllerStyle = ZJDrawerControllerStyleParallaxSlide;
    // 任何界面都能打開(kāi)抽屜
    drawer.canOpenDrawerAtAnyPage = YES;
    //...
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    self.window.rootViewController = drawer;
    [self.window makeKeyAndVisible];
    
    return YES;
}
swipeTableViewCell.gif

- (NSArray *)tableView:(UITableView *)tableView leftSwipeButtonsAtIndexPath:(NSIndexPath *)indexPath {
    ZJSwipeButton *leftBtn = [[ZJSwipeButton alloc] initWithTitle:@"檢查1" image:nil onClickHandler:^(UIButton *swipeButton) {
        NSLog(@"點(diǎn)擊了檢查1: --- %ld", indexPath.row);
        [ZJProgressHUD showStatus:[NSString stringWithFormat:@"點(diǎn)擊了檢查1: --- %ld", indexPath.row] andAutoHideAfterTime:1];
    }];
    ZJSwipeButton *leftBtn1 = [[ZJSwipeButton alloc] initWithTitle:@"測(cè)試2" image:nil onClickHandler:^(UIButton *swipeButton) {
        NSLog(@"點(diǎn)擊了測(cè)試2: --- %ld", indexPath.row);
        [ZJProgressHUD showStatus:[NSString stringWithFormat:@"點(diǎn)擊了測(cè)試2: --- %ld", indexPath.row] andAutoHideAfterTime:1];

    }];
    return @[leftBtn,leftBtn1, leftBtn2,leftBtn3];

}
navigationController.gif
    UIViewController *vc = [ViewController new];
    ZJNavigationController *navi = [[ZJNavigationController alloc] initWithRootViewController:vc];
    // 開(kāi)啟
    [navi zj_enableFullScreenPop:YES];
qrScanner.gif
    ZJQRScannerView *scanner = [ZJQRScannerView new];
    scanner.frame = self.view.bounds;
    [self.view addSubview:scanner];
    // 開(kāi)始掃描
    [scanner startScanning];
    // 掃描完成
    [scanner setScannerFinishHandler:^(ZJQRScannerView *scanner, NSString *resultString) {
        // 掃描結(jié)束
        NSLog(@"內(nèi)容是%@", resultString);
    }];
tagView.gif
    // 初始化第一個(gè)section數(shù)據(jù)
    for (int i=0; i<20; i++) {
        ZJTagItem *item = [ZJTagItem new];
        item.name = [NSString stringWithFormat:@"選中--- %d",i];
        [selectedItems addObject:item];
    }
    // 初始化第二個(gè)section數(shù)據(jù)
    for (int i=0; i<40; i++) {
        ZJTagItem *item = [ZJTagItem new];
        item.name = [NSString stringWithFormat:@"未選中--- %d",i];
        [unselectedItems addObject:item];
    }
    // 初始化
    _tagView = [[ZJTagView alloc] initWithSelectedItems:selectedItems unselectedItems:unselectedItems];
lockView.gif
- (IBAction)deleteBtnOnClick:(id)sender {
    if (![ZJLockViewController isAllreadySetPassword]) {
        NSLog(@"未曾設(shè)置過(guò)密碼或者密碼已經(jīng)被刪除");
        return;
    }
    // 初始化
    ZJLockViewController *lock = [[ZJLockViewController alloc] initWithOperationType:ZJLockOperationTypeRemove delegate:self];
    // 寬度
    lock.lockView.pwdBtnSlideLength = 64.f;
    // 線寬
    lock.lockView.lineWidth = 8;
    // 設(shè)置不同狀態(tài)的圖片
    [lock.lockView setBtnImage:[UIImage imageNamed:@"normal"] forState:ZJLockButtonStateNormal];
    [lock.lockView setBtnImage:[UIImage imageNamed:@"selected"] forState:ZJLockButtonStateSelected];
    [lock.lockView setBtnImage:[UIImage imageNamed:@"error"] forState:ZJLockButtonStateError];

    [self presentViewController:lock animated:YES completion:nil];
    

}
scrollPageView.gif

    override func viewDidLoad() {
        super.viewDidLoad()
        // 這個(gè)是必要的設(shè)置
        automaticallyAdjustsScrollViewInsets = false
        
        var style = SegmentStyle()
        // 縮放文字
        style.scaleTitle = true
        // 顏色漸變
        style.gradualChangeTitleColor = true
        // segment可以滾動(dòng)
        style.scrollTitle = true
        style.showExtraButton = true
        let childVcs = setChildVcs()
        let titles = childVcs.map { $0.title! }
 
        let scrollPageView = ScrollPageView(frame: CGRect(x: 0, y: 64, width: view.bounds.size.width, height: view.bounds.size.height - 64), segmentStyle: style, titles: titles, childVcs: childVcs, parentViewController: self)
        view.addSubview(scrollPageView)
    }
refreshView.gif
        let normalFooter = NormalAnimator.normalAnimator()
        normalFooter.lastRefreshTimeKey = "exampleFooter1"
        
        tableView.zj_addRefreshHeader(header, refreshHandler: {[weak self] in
            /// 多線程中不要使用 [unowned self]
            /// 注意這里的gcd是為了模擬網(wǎng)絡(luò)加載的過(guò)程, 在實(shí)際的使用中, 不需要這段gcd代碼, 直接在這里進(jìn)行網(wǎng)絡(luò)請(qǐng)求, 在請(qǐng)求完畢后, 調(diào)用分類方法, 結(jié)束刷新
            dispatch_async(dispatch_get_global_queue(0, 0), {
                for i in 0...50000 {
                    if i <= 10 {
                        self?.data.append(i)
                        
                    }
                    /// 延時(shí)
                    print("加載數(shù)據(jù)中")
                }
                dispatch_async(dispatch_get_main_queue(), {
                    self?.tableView.reloadData()
                    /// 刷新完畢, 停止動(dòng)畫
                    self?.tableView.zj_stopHeaderAnimation()
                    
                })
            })
            
        })

這上面提到的所有的自定義控件都來(lái)自于這本書籍 感謝, 如有不當(dāng)?shù)牡胤? 請(qǐng)及時(shí)告知, 我會(huì)及時(shí)刪除.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荣月,一起剝皮案震驚了整個(gè)濱河市管呵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哺窄,老刑警劉巖捐下,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件账锹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡坷襟,警方通過(guò)查閱死者的電腦和手機(jī)奸柬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事目代」膛铮” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵哨颂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)铃肯,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任传蹈,我火速辦了婚禮缘薛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卡睦。我一直安慰自己宴胧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布表锻。 她就那樣靜靜地躺著恕齐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞬逊。 梳的紋絲不亂的頭發(fā)上显歧,一...
    開(kāi)封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音确镊,去河邊找鬼士骤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蕾域,可吹牛的內(nèi)容都是我干的拷肌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼旨巷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼巨缘!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起采呐,我...
    開(kāi)封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤若锁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后斧吐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體又固,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仲器,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仰冠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娄周。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沪停,靈堂內(nèi)的尸體忽然破棺而出煤辨,到底是詐尸還是另有隱情,我是刑警寧澤木张,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布众辨,位于F島的核電站,受9級(jí)特大地震影響舷礼,放射性物質(zhì)發(fā)生泄漏鹃彻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一妻献、第九天 我趴在偏房一處隱蔽的房頂上張望蛛株。 院中可真熱鬧,春花似錦育拨、人聲如沸谨履。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)笋粟。三九已至,卻和暖如春析蝴,著一層夾襖步出監(jiān)牢的瞬間害捕,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工闷畸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尝盼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓佑菩,卻偏偏與公主長(zhǎng)得像盾沫,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子倘待,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)疮跑、插件组贺、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評(píng)論 4 62
  • 今天晚上凸舵,有一個(gè)小時(shí),我都在看亨利的第15冊(cè)失尖,我覺(jué)得他那個(gè)第一個(gè)故事啊奄,非常搞笑渐苏,也非常有趣,那就是講菇夸,亨利的琼富,圣誕...
    九五自尊閱讀 191評(píng)論 0 0
  • 最近參加第九期寫作群結(jié)束,我沒(méi)有報(bào)名參加第十期庄新,因?yàn)槲易约涸谥耙呀?jīng)報(bào)了另外一個(gè)下班后的寫作群鞠眉。 這個(gè)群完全是一個(gè)...
    紅袖飛揚(yáng)閱讀 221評(píng)論 0 1
  • 今天端午,加班择诈。 沒(méi)有粽子械蹋,自己來(lái)畫。 甜的羞芍?咸的哗戈? 由你來(lái)定。 端午安康荷科! 一只自己瞎琢磨彩鉛的胖球唯咬,哞~
    三日之城閱讀 485評(píng)論 2 3