#define Spacing 10 //間隔距離 #define Btn_NUMs 3//每列個數 #define Btn_HEIGHT TRUEW(30) #define Btn_WIDTH ((SCREEN_WIDTH-(Btn_NUMs+1)*Spacing)/Btn_NUMs) [btn mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.contentView.mas_top).offset(Spacing+(i/3)*(Spacing+Btn_HEIGHT)); make.left.equalTo(self.contentView.mas_left).offset(Spacing+(i%3)*(Spacing+Btn_WIDTH)); make.width.mas_equalTo(Btn_WIDTH); make.height.mas_equalTo(Btn_HEIGHT); }];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 200, 100)]; label.backgroundColor = [UIColor yellowColor]; label.text = @"...";//設置文字 label.textColor = [UIColor redColor];//文字顏色 label.textAlignment = NSTextAlignmentLeft;//左右對齊方式 label.shadowColor = [UIColor greenColor]; label.shadowOffset = CGSizeMake(-2, -2); //設置陰影的顏色和偏移量 [label sizeToFit]; //讓label的大小適應label裏展現的文字 label.lineBreakMode = NSLineBreakByTruncatingTail; //省略號出現的模式 label.numberOfLines = 0; //容許展現的行數,寫成0表明自動換行 label.font = [UIFont systemFontOfSize:14];//設置字體,系統字體14號,默認是系統字體17號 [label setFont:[UIFont boldSystemFontOfSize:14]];//設置體字 label.font = [UIFont italicSystemFontOfSize:14];//斜體 //快速遍歷系統字體庫,[UIFont familyNames]返回值是一個數組:系統支持的全部字體默認 HelveticaNeue for (NSString *str in [UIFont familyNames]) { NSLog(@"str = %@",str); } //系統默認字體加黑 label.font = [UIFont boldSystemFontOfSize:20]; //系統默認字體斜體 label.font = [UIFont italicSystemFontOfSize:20]; //蘋方字體 [UIFont fontWithName:@"PingFang SC" size:18] //label 設置行間距 NSString *str = @"在實際開發中,Label的默認行間距大小通常都是知足不了UI設計師設計的行間距大小的。因而乎,就須要咱們開發人員手動調整Label的行間距大小。然而,UILabel並無提供直接修改行間距大小的屬性,可是咱們能夠用Label的attributedText屬性來設置. 在實際開發中,Label的默認行間距大小通常都是知足不了UI設計師設計的行間距大小的。因而乎,就須要咱們開發人員手動調整Label的行間距大小。然而,UILabel並無提供直接修改行間距大小的屬性,可是咱們能夠用Label的attributedText屬性來設置"; NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:str]; NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineSpacing = 8.0; // 設置行間距 paragraphStyle.alignment = NSTextAlignmentJustified; //設置兩端對齊顯示 [attributedStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, attributedStr.length)]; UILabel *lineSpaceLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, [UIScreen mainScreen].bounds.size.width - 40, 0)]; lineSpaceLabel.backgroundColor = [UIColor cyanColor]; lineSpaceLabel.numberOfLines = 0; lineSpaceLabel.attributedText = attributedStr; [lineSpaceLabel sizeToFit]; [self.view addSubview:lineSpaceLabel]; //字間距 [attributedStr addAttribute:NSKernAttributeName value:@(10) range:NSMakeRange(0, attributedStr.length)];
//view的座標區域(相對於父視圖) @property(nonatomic) CGRect frame; //背影色 @property(nonatomic,copy) UIColor *backgroundColor //透明度 @property(nonatomic) CGFloat alpha; //隱藏狀態 @property(nonatomic,getter=isHidden) BOOL hidden; //中心點座標 @property(nonatomic) CGPoint center; //子圖標界限 @property(nonatomic) BOOL clipsToBounds; //在view上添加一個view - (void)addSubview:(UIView *)view; //自殺 - (void)removeFromSuperview; view3.backgroundColor = [UIColor colorWithRed:160/255.0f green:120/255.0f blue:20/255.0f alpha:1];//自定義顏色(使用三原色) view1.clipsToBounds = YES;//不容許子視圖的範圍超 查找視圖: NSArray *arrayFromView = [bigView subviews];//查詢某個view全部的子view,返回結果是數組 UIView *midView = [arrayFromView objectAtIndex:1];//經過數組下標,找到某個固定的子view 插入視圖:查找視圖: [bigView insertSubview:insertView atIndex:1];//在固定層級插入視圖 [bigView insertSubview:insertView belowSubview:midView]; //在某一個子視圖的下面插入 [bigView insertSubview:insertView aboveSubview:midView]; //在某一個子視圖的上面面插入 修改視圖層次: [bigView exchangeSubviewAtIndex:0 withSubviewAtIndex:2];//交換2個視圖的層次 [bigView sendSubviewToBack:midView];//將某一個子視圖放到最下面 [bigView bringSubviewToFront:midView];//將某一個子視圖放到最上面 刪除視圖: [insertView removeFromSuperview];//從父視圖中移除 延遲刪除視圖: [self performSelector:@selector(runLater:) withObject:midView afterDelay:1]; //延遲1秒調用 - (void)runLater:(UIView *)view { UIView *bigView = [view superview];//找到父視圖 [bigView removeFromSuperview]; } UIView animateWithDuration:1 animations: follow: bigView.autoresizesSubviews = YES;//容許子視圖跟隨 smallView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; //設置被跟隨的模式,能夠多選「|」按位或 CGRect rect = [[UIScreen mainScreen] bounds];//獲取整個屏幕的大小 //獲取整個屏幕的rect //frame是相對於父視圖的rect, //bounds是相對於本身的rect,通常狀況下前兩位數字都是0 //rect裏的4個數字是分紅2組的:一組rect.origin表明座標 一組rect.size表明大小 View判斷是否爲某類 NSArray *arrayFromView = [bigView subviews];//查詢某個view全部的子view,返回結果是數組 UIView *midView = [arrayFromView objectAtIndex:1];//經過數組下標,找到某個固定的子view [obj isKindOfClass:[UIButton class]//包括這個類的子類 [obj isMemberOfClass:[UIButton class]]//只限制本類不包括子類 視圖圓角與弧度: view.layer.borderColor = [[UIColor redColor] CGColor];//layer 至關於 frame (能夠不用管) //borderColor 是邊框顏色,類型是: CGColorRef,須要把UIColor 經過 CGColor 轉換 view.layer.borderWidth = 10;//邊框的寬度 view.layer.cornerRadius = 30;//邊框的弧度 view.layer.masksToBounds = YES;//(大多數不用加這句話就行)個別不能用的需加這句話 btn.layer.masksToBounds = YES;//裁剪子視圖不容許子視圖超過本身的範圍
//導航背景圖片 [vc.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault]; //樣式 [vc.navigationController.navigationBar setBarStyle:UIBarStyleDefault]; //導航下邊橫線是否顯示 不設置image則顯示橫線 [vc.navigationController.navigationBar setShadowImage:[UIImage new]]; //導航背景色 vc.navigationController.navigationBar.barTintColor = [UIColor whiteColor]; //設置導航條裏字體的顏色 self.navigationController.navigationBar.tintColor = [UIColor redColor]; //是否半透明狀態,YES爲透明 會影響座標點{0,0}的位置 [vc.navigationController.navigationBar setTranslucent:NO];//半透明 //navigationItem //self.navigationItem的設置是針對當前頁面的 self.navigationItem.hidesBackButton = YES;//隱藏當前頁面的導航按鈕 self.navigationItem.title = @「第一頁」;//設置當前頁面的title,會影響下一個頁面的back的按鈕; self.navigationItem.titleView = titleLabel;//設置一個view顯示在當前頁面的導航條的中間添加一個Label //自定義返回按鈕 -(void)setNavgationLeftItemBtnWithIcon:(NSString*)icon{ UIImage* backImage = [UIImage imageNamed:icon]; UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithImage:backImage style:UIBarButtonItemStyleDone target:self action:@selector(leftBarItemClick)]; backItem.tintColor = [UIColor redColor];//返回按鈕內容的填充顏色 self.navigationItem.leftBarButtonItem = backItem; } 底部的工具條相關操做(UIToolbar) self.navigationController.toolbarHidden = NO; // 讓底部的 UIToolbar(工具條) 顯示出來,針對整個導航控制器默認高度是44 self.navigationController.toolbar.barTintColor = [UIColor brownColor];//背景色 self.navigationController.toolbar.tintColor = [UIColor redColor];//渲染色 [self.navigationController.toolbar setBackgroundImage:[UIImage imageNamed:@"ccc"] forToolbarPosition:UIBarPositionBottom barMetrics:UIBarMetricsDefault];//背景圖片 self.toolbarItems = [NSArray arrayWithObjects:dbbi, abbi, dbbi, bbbi, dbbi, cbbi, dbbi, nil]; //設置當前頁面裏,導航自帶的toolBar上的專用按鈕組
UIScrollView *sv = [[UIScrollView alloc] initWithFrame:CGRectMake(40, 100, 240, 300)]; //建立一個滾動視圖(在內容的展示上,相似於瀏覽器) sv.contentSize = CGSizeMake(480, 600);//設置可展現內容的size sv.bounces = NO;//設置彈簧效果 sv.pagingEnabled = YES;//翻頁效果 self.automaticallyAdjustsScrollViewInsets = NO;//關掉vc對sv的自動調整 sv.userInteractionEnabled = NO;//用戶點擊事件 sv.scrollEnabled = NO;//是否容許用戶操做sv的滾動 sv.minimumZoomScale = 0.5; sv.maximumZoomScale = 2;//設置容許sv裏的子視圖縮放的倍數 //告訴sv,容許縮放哪個子視圖 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return [scrollView.subviews lastObject]; return [scrollView viewWithTag:10];//經過tag值 } UIPageControl:(頁碼控制器) UIPageControl *pc = [[UIPageControl alloc] initWithFrame:CGRectMake(20, 440, 280, 30)];//建立一個頁碼控制器(小圓點) pc.numberOfPages = 3;//小圓點的個數 pc.userInteractionEnabled = NO;//用戶事件 pc.currentPage = 1;//讓pc對應的圓點亮起來 pc.currentPageIndicatorTintColor = [UIColor magentaColor];//被選中的小圓點顏色 pc.pageIndicatorTintColor = [UIColor yellowColor];//沒被選中的小圓點顏色 //結束滑行調用 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { sv.contentOffset = CGPointMake(240, 300);//設置偏移量 [sv setContentOffset:CGPointMake(240, 300) animated:YES];//加動畫設置偏移量 } //滑行結束時調用 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { UIPageControl *pc = (UIPageControl *)[self.view viewWithTag:1]; pc.currentPage = scrollView.contentOffset.x / scrollView.frame.size.width; //根據x方向的偏移量計算當前是在第幾頁,而後讓對應的小圓點亮起來 }
UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(20, 60, 280, 70)]; //文本輸入框,通常用做用戶輸入帳號,密碼,我的信息等 tf.placeholder = @"請輸入賬號";//提示語,文本輸入框,通常用於輸入帳號,密碼,我的信息 [tf setValue:ColorHex_666666 forKeyPath:@"_placeholderLabel.textColor"];//提示語字體顏色 tf.textColor = ColorHex_333333;//輸入時的字體顏色 tf.font = [UIFont systemFontOfSize:40];//文框標題的字體大小 tf.borderStyle = UITextBorderStyleLine;//邊框風格 tf.backgroundColor = [UIColor redColor]; tf.background = [UIImage imageNamed:@"aaa"];//設置背景圖片,若是邊框風格是圓角,那麼背景圖失效,不然邊框風格失效 tf.adjustsFontSizeToFitWidth = YES;//當文本的寬度超過tf的寬度時,文字會自動變小(系統默認是有下限的) tf.minimumFontSize = 30.0f;//文字變小的下限 tf.textAlignment = NSTextAlignmentLeft; //左右對齊方式,(和label的設置方式同樣) tf.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;//垂直對齊方式,(btn對齊方式的設置也是用這種方式) //tf的左右對齊和垂直對齊在工做中通常都不設置,直接使用默認的 tf.keyboardType = UIKeyboardTypeEmailAddress;//鍵盤類型 tf.returnKeyType = UIReturnKeyNext;//return鍵的類型,(這個屬性只是設置外觀,和功能毫無關係) tf.secureTextEntry = YES;//安全輸入模式(暗文輸入) tf.clearsOnBeginEditing =YES; //從新輸入時清空tf的文字 tf.clearButtonMode = UITextFieldViewModeAlways;//設置清空按鈕出現的時機 UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; v.backgroundColor = [UIColor blueColor]; tf.leftView = v;//這個view用於顯示密碼前面的👦 [v release]; tf.leftViewMode = UITextFieldViewModeAlways;//tf左邊的視圖和出現的時機(好比說用戶的頭像或者一把鎖) UIView *av = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; av.backgroundColor = [UIColor magentaColor]; tf.inputView = av;//代替鍵盤(工做中通常不用) tf.inputAccessoryView = av;//鍵盤的附屬view(出如今鍵盤上面) [av release]; [self.view sendSubviewToBack:_result.view]; //點擊結果按鈕就將....頁放到下面 鍵盤的點擊事件: - (void)textFieldDidBeginEditing:(UITextField *)textField//當鍵盤彈出時調用 { NSLog(@"end = %d",textField.tag); } - (void)textFieldDidEndEditing:(UITextField *)textField//鍵盤收起時調用 { NSLog(@"end = %d",textField.tag); } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event//當被點擊時時調用(觸發) { UITextField *tf = (UITextField *)[self.view viewWithTag:1]; [tf resignFirstResponder];//收起鍵盤 [self.view endEditing: YES];//無論點哪一個都能收起鍵盤 [self.view sendSubviewToBack:_result.view]; //點擊結果按鈕就將....頁放到下面 } - (BOOL)textFieldShouldReturn:(UITextField *)textField//點擊return鍵時調用 {} UITextField
-(void)viewDidLoad { self.tableView = [[UITableView alloc]init]; self.tableView.delegate = self; self.tableView.dataSource = self; // self.tableView.emptyDataSetDelegate = self; // self.tableView.emptyDataSetSource = self; self.tableView.scrollsToTop = YES; self.tableView.showsVerticalScrollIndicator = NO;//隱藏垂直方向滑動條 self.tableView.rowHeight = UITableViewAutomaticDimension; self.tableView.estimatedRowHeight = 100;//預編譯行高 提升cell建立效率 self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;//cell不顯示分割線 self.tableView.separatorColor = [UIColor orangeColor];//cell線的顏色 self.tableView.tableFooterView = [UIImageView new]; [self.tableView setLayoutMargins:UIEdgeInsetsZero];//分割線 self.tableView.contentInset = UIEdgeInsetsMake(0, 0,59, 0);//滾動範圍 // if (self.isOpenHeaderRefresh){//是否開啓下拉刷新 // __weak typeof(self)weakSelf = self; // self.tabView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ // [weakSelf refreshData]; // }]; // } // // if (self.isOpenFooterRefresh){//是否開啓上啦加載 // __weak typeof(self)weakSelf = self; // self.tabView.mj_footer = [MJRefreshAutoStateFooter footerWithRefreshingBlock:^{ // [weakSelf loadMoreData]; // }]; // } [self.view addSubview:self.tableView]; [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self.view).with.insets(UIEdgeInsetsMake(0, 0, 0, 0)); }]; } -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ if (indexPath.row==0) { HomeMoreCell *cell = [tableView dequeueReusableCellWithIdentifier:@"HomeMoreCell"]; if (!cell){ cell= [[[NSBundle mainBundle] loadNibNamed:@"HomeMoreCell" owner:self options:nil] lastObject]; [tableView registerNib:[UINib nibWithNibName:@"HomeMoreCell" bundle:nil] forCellReuseIdentifier:@"HomeMoreCell"]; } return cell; } UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; if (cell == nil) { cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"]; } return cell; } //繪製cell圓角 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { // 圓角弧度半徑 CGFloat cornerRadius = 6.f; // 設置cell的背景色爲透明,若是不設置這個的話,則原來的背景色不會被覆蓋 cell.backgroundColor = UIColor.clearColor; cell.contentView.backgroundColor = UIColor.clearColor; // 建立一個shapeLayer CAShapeLayer *layer = [[CAShapeLayer alloc] init]; CAShapeLayer *backgroundLayer = [[CAShapeLayer alloc] init]; //顯示選中 // 建立一個可變的圖像Path句柄,該路徑用於保存繪圖信息 CGMutablePathRef pathRef = CGPathCreateMutable(); // 獲取cell的size // 第一個參數,是整個 cell 的 bounds, 第二個參數是距左右兩端的距離,第三個參數是距上下兩端的距離 CGRect bounds = CGRectInset(cell.bounds, 10, 0); // CGRectGetMinY:返回對象頂點座標 // CGRectGetMaxY:返回對象底點座標 // CGRectGetMinX:返回對象左邊緣座標 // CGRectGetMaxX:返回對象右邊緣座標 // CGRectGetMidX: 返回對象中心點的X座標 // CGRectGetMidY: 返回對象中心點的Y座標 // 這裏要判斷分組列表中的第一行,每組section的第一行,每組section的中間行 // CGPathAddRoundedRect(pathRef, nil, bounds, cornerRadius, cornerRadius); if (indexPath.row == 1) { // 初始起點爲cell的左下角座標 CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds)); // 起始座標爲左下角,設爲p,(CGRectGetMinX(bounds), CGRectGetMinY(bounds))爲左上角的點,設爲p1(x1,y1),(CGRectGetMidX(bounds), CGRectGetMinY(bounds))爲頂部中點的點,設爲p2(x2,y2)。而後鏈接p1和p2爲一條直線l1,鏈接初始點p到p1成一條直線l,則在兩條直線相交處繪製弧度爲r的圓角。 CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds), CGRectGetMidX(bounds), CGRectGetMinY(bounds), cornerRadius); CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius); // 終點座標爲右下角座標點,把繪圖信息都放到路徑中去,根據這些路徑就構成了一塊區域了 CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds)); } else if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) { // 初始起點爲cell的左上角座標 CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds)); CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds), CGRectGetMidX(bounds), CGRectGetMaxY(bounds), cornerRadius); CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius); // 添加一條直線,終點座標爲右下角座標點並放到路徑中去 CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds)); } else { // 添加cell的rectangle信息到path中(不包括圓角) CGPathAddRect(pathRef, nil, bounds); } // 把已經繪製好的可變圖像路徑賦值給圖層,而後圖層根據這圖像path進行圖像渲染render layer.path = pathRef; backgroundLayer.path = pathRef; // 注意:但凡經過Quartz2D中帶有creat/copy/retain方法建立出來的值都必需要釋放 CFRelease(pathRef); // 按照shape layer的path填充顏色,相似於渲染render // layer.fillColor = [UIColor colorWithWhite:1.f alpha:0.8f].CGColor; layer.fillColor = [UIColor whiteColor].CGColor; // view大小與cell一致 UIView *roundView = [[UIView alloc] initWithFrame:bounds]; // 添加自定義圓角後的圖層到roundView中 [roundView.layer insertSublayer:layer atIndex:0]; roundView.backgroundColor = UIColor.clearColor; // cell的背景view cell.backgroundView = roundView; // 以上方法存在缺陷當點擊cell時仍是出現cell方形效果,所以還須要添加如下方法 // 若是你 cell 已經取消選中狀態的話,那如下方法是不須要的. UIView *selectedBackgroundView = [[UIView alloc] initWithFrame:bounds]; backgroundLayer.fillColor = [UIColor clearColor].CGColor;//cell選中顏色 [selectedBackgroundView.layer insertSublayer:backgroundLayer atIndex:0]; selectedBackgroundView.backgroundColor = UIColor.clearColor; cell.selectedBackgroundView = selectedBackgroundView; //設置cell分割線距離屏幕邊距的問題 if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsMake(0, 20, 0, 20)]; } if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsMake(0,20, 0, 20)]; } } #pragma mark - DZNEmptyDataSetSource Methods -(UIImage*)imageForEmptyDataSet:(UIScrollView *)scrollView { return [UIImage imageNamed:@"bg_noData"]; } - (UIColor*)backgroundColorForEmptyDataSet:(UIScrollView*)scrollView { return [UIColor whiteColor]; } -(void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view{ }