IOS UI

#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)];
UILabel
//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;//裁剪子視圖不容許子視圖超過本身的範圍
UIView
UIImageView
//導航背景圖片
[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上的專用按鈕組
UINavigation
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方向的偏移量計算當前是在第幾頁,而後讓對應的小圓點亮起來
}
UIScrollView
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
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{

}
UITableView
相關文章
相關標籤/搜索