iOS---基本的UI控件

本文详细介绍了iOS开发中常用的UI控件配置方法及属性动画实现技巧,包括UILabel、UIButton、UISlider等控件的使用及颜色设置、动画效果等。

不知不觉一年多了,该好好整理啦!亡羊补牢,希望为时不晚微笑

//

//  ViewController.m

//  整理笔记

//

//  Created by imac on 15/8/22.

//  Copyright (c) 2015 公司信息yu. All rights reserved.

//


#import "ViewController.h"


#pragma mark - 使用宏替换

// 减少硬编码,使用获取的屏幕的物理尺寸来 适配UI

#define kScreenHeight [UIScreen mainScreen].bounds.size.height

#define kScreenWidth  [UIScreen mainScreen].bounds.size.width


@interface ViewController ()

{NSInteger _index;}

@property (strong, nonatomic) UIView *myView;

@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

//通过tag值查找view

    UIView *myView1 = [self.view viewWithTag:100];

    myView1.alpha = 0.5;

    

#pragma mark - 坐标系统转换

    // 拿到视图的 transform

    CGAffineTransform transform = self.myView.transform;


    // 构造一个 x方向放大了 1.2 y方向放大了1.2倍的transform

    self.myView.transform = CGAffineTransformScale(transform, 1.2, 1.2);


    // 构造一个 x方向缩小了 0.8 y方向缩小了0.8倍的transform

    self.myView.transform = CGAffineTransformScale(transform, 0.8, 0.8);


    // 沿着center 选择指定的角度 M_PI π 180°

    self.myView.transform = CGAffineTransformRotate(transform, M_PI / 3.0);

    

    //位置复原

    self.myView.transform = CGAffineTransformIdentity;


#pragma mark -   /***************  UI控件  **************/

    

#pragma mark UILabel

    

UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, kScreenWidth, 200)];

    

#warning 要先设置内容,才能自适应.而且自适应,要写在行数设置后面

    // 内容自适应

    // [textLabel sizeToFit];

    

    // 设置内容

    textLabel.text = @"Talk is cheap show me the Code. 废话少说,放码过来";

    textLabel.backgroundColor = [UIColor orangeColor];

    

    // 行数设置,默认为1 单行显示。 0 表示行数没有限制,在足够的高度之下,换行显示

    textLabel.numberOfLines = 0;

    

    // 设置文本的打断方式  Mode 模式、 style 样式, type 类型

    textLabel.lineBreakMode = NSLineBreakByTruncatingMiddle;

    

    // 设置文本颜色

    textLabel.textColor = [UIColor grayColor];

    

    // 设置阴影颜色

    textLabel.shadowColor = [UIColor blackColor];

    

    // 设置阴影的偏移量  (水平位置,垂直位置)

    textLabel.shadowOffset = CGSizeMake(3, 3);

    

    // 设置文本的对齐方式

    textLabel.textAlignment = NSTextAlignmentCenter;

    

    // 设置字体

    //    textLabel.font = [UIFont systemFontOfSize:28];

    //    textLabel.font = [UIFont boldSystemFontOfSize:28];

    textLabel.font = [UIFont italicSystemFontOfSize:28];

    

    // 内容自适应

    [textLabel sizeToFit];

    

    textLabel.tag = 101;

    

    // 设置文本特殊状态下的显示效果

    textLabel.highlightedTextColor = [UIColor redColor];

    

    

[self.view addSubview:textLabel];

    

    // 测试高亮状态

    //    [self performSelector:@selector(test:) withObject:textLabel afterDelay:2];

    

    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(test:) userInfo:nil repeats:YES];

    

}


- (void)test:(NSTimer *)timer {


    UILabel *textLabel = (UILabel *)[self.view viewWithTag:101];

    

    textLabel.highlighted = !textLabel.highlighted// 设置高亮状态

}


- (void)viewDidLoad1 {

    [super viewDidLoad];

    

#pragma mark UIImageView 图像视图

    //  作用: 显示单个图片,或者一组动画图片

    

    // ----------------- 显示单张图片 ------------------

    

    // 初始化UIImage 对象

    // 图片拥有 thin.jpegthin@2x.jpeg thin@3x.jpeg

    // 图片倍数可以省略。

    // 图片的 扩展名,如果是 ".png"可以省略

    

    UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(35, 100, 300, 300)];

    imgView.backgroundColor = [UIColor orangeColor];

    imgView.image = [UIImage imageNamed:@"thin.jpeg"];

    [self.view addSubview:imgView];

    

    // 设置图片 内容显示模式

    /**

     *   UIViewContentModeScaleToFill,      拉伸铺满视图

     UIViewContentModeScaleAspectFit,   自适应拉伸,不破坏宽高比例

     UIViewContentModeScaleAspectFill,  可以超出视图范围,不破环比例

     *

     */

    

    imgView.contentMode = UIViewContentModeTopLeft;


    imgView.clipsToBounds = YES;

    

    // 设置图像视图的高亮状态

    imgView.highlightedImage = [UIImage imageNamed:@"image"];


#pragma mark UIButton

#warning 自定按钮,设置图片方法的区别

    // UI设计师,  美工

    // 自定义按钮,首先要把按钮的类型 设置为 Custom 自定义类型

    // setBackgroundImage: 会拉伸图片,但是不会影响标题显示

    // setImage: 会使用图片的原始大小,但是会干扰标题的显示

    


    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

    button.frame = CGRectMake(160, 10, 60, 44);

    

    // 1.设置按钮的标题

    

    // 设置标题的颜色

    [button setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];

    

    [button setTitle:@"正常状态 哈哈" forState:UIControlStateNormal];  // 普通

    [button setTitle:@"按钮被选中" forState:UIControlStateSelected]; // 选中

    [button setTitle:@"高亮" forState:UIControlStateHighlighted]; // 高亮

    [button setTitle:@"失效的" forState:UIControlStateDisabled];  // 失效

    //    button.enabled = NO;  // 设置按钮的可用状态,如果设置失效状态,会显示该状态

    //    button.userInteractionEnabled = NO;  // 只是不能响应事件,不会改变按钮的显示

    

    

    [button setImage:[UIImage imageNamed:@"playing_btn_love"] forState:UIControlStateNormal];

    [button setImage:[UIImage imageNamed:@"playing_btn_in_myfavor_h"] forState:UIControlStateHighlighted];

    [button setImage:[UIImage imageNamed:@"playing_btn_in_myfavor"] forState:UIControlStateSelected];

    

    // 设置背景图片,图片会被拉伸,并且是被 标题盖住

        [button setBackgroundImage:[UIImage imageNamed:@"playing_btn_love"] forState:UIControlStateNormal];

       [button setBackgroundImage:[UIImage imageNamed:@"playing_btn_in_myfavor_h"] forState:UIControlStateHighlighted];

       [button setBackgroundImage:[UIImage imageNamed:@"playing_btn_in_myfavor"] forState:UIControlStateSelected];

    

  

    

    // 如果出现 unrecognized selector sent to instance 异常原因

    // 可以查找该是否实现了

    [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];

    

    [imgView addSubview:button];

    

    // 开启用户事件. 如果设置为NO,表示不响应,且视图所有子视图,都无法响应事件

    imgView.userInteractionEnabled = YES;

    

    // 添加tag

    imgView.tag = 110;

    

    // 为按钮添加触摸事件

    

    

    /*

     UIControlEventTouchDown         用户按下手指

     UIControlEventTouchDownRepeat   重复按下

     UIControlEventTouchDragInside   在内部拖拽

     UIControlEventTouchUpInside     用户触摸并且在范围之内抬起手指

     UIControlEventTouchCancel       触摸取消 一次没有结束,屏幕失去了焦点

     */

    [button addTarget:self action:@selector(buttonAction1:) forControlEvents:UIControlEventTouchUpInside];

    

//设置button的边框

    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(20, 100, 200, 30)];

    [btn.layer setBorderWidth:1.0];//边框宽度

    [btn.layer setBorderColor:[UIColor blackColor].CGColor];//设置边框颜色

    [self.view addSubview:btn];



}


- (void)buttonAction1:(UIButton *)sender {

    // 切换按钮的选中状态

    sender.selected = !sender.selected;

    

}



- (void)buttonAction:(UIButton *)sender {

    UIImageView *imageView = (UIImageView *)[self.view viewWithTag:110];

    imageView.highlighted = !imageView.highlighted;

}


#pragma mark - UISlider滑块

- (void)viewDidLoad2 {

    [super viewDidLoad];

    

    UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 100, 310, 200)];

    slider.backgroundColor = [UIColor orangeColor];

    

    [slider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];

    

    [self.view addSubview:slider];

    

    // 设置滑块的最小值

    slider.minimumValue = 0;

    

    // 设置滑块的最大值

    slider.maximumValue = 100;

    

    // 设置当前值

    slider.value = 0.5;

    

    // 定制样式

    // 设置轨迹 颜色

    slider.minimumTrackTintColor = [UIColor greenColor];

    

    slider.maximumTrackTintColor = [UIColor orangeColor];

    

    //    slider setMaximumTrackImage:<#(UIImage *)#> forState:<#(UIControlState)#>

    //    slider setMinimumTrackImage:<#(UIImage *)#> forState:<#(UIControlState)#>

    

    // 设置大头针颜色

    //    [slider setThumbTintColor:[UIColor redColor]];

    

    // 设置大头针图片

    [slider setThumbImage:[UIImage imageNamed:@"playing_slider_thumb"] forState:UIControlStateNormal];

    

    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeAction:) userInfo:slider repeats:YES];

}


- (void)timeAction:(NSTimer *)sender {

    _index++;

    UISlider *slider = sender.userInfo;

    //    slider.value = _index;

    [slider setValue:_index animated:YES];

    

    //    if (_index == ?) {

    //        [sender invalidate];

    //    }

}


- (void)sliderAction:(UISlider *)sender {

    

    // sender.value 默认为 0-1

    NSLog(@"value = %f",  sender.value);

}


    


#pragma mark - 属性动画

- (void)testAnimation2 {

    // Block语法动画

    //1.翻转效果

    [UIView animateWithDuration:1.0 animations:^{

        

        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:_myView cache:YES];

        // 交换两个 子视图的层次结构

        [_myView exchangeSubviewAtIndex:0 withSubviewAtIndex:1];

        

    }];

    

    //2.view从屏幕外进入到屏幕中

    _myView.frame = CGRectMake(0, kScreenHeight, 320, 200);

    [UIView animateWithDuration:0.5 animations:^{

        

        _myView.frame = CGRectMake(0, kScreenHeight - 200, 320, 200);

        

    }];


}


- (void)testAnimation1 {

    // ----------------首尾式动画-------------------//

    

// 1.标记动画的开始

    [UIView beginAnimations:nil context:nil];

    

// 2.设置动画的属性

    [UIView setAnimationDuration:2.0];   // 设置动画的持续时间

    

    [UIView setAnimationRepeatCount:100];//动画重复次数

    

    [UIView setAnimationRepeatAutoreverses:YES];//重头播放一次

    

// 3.设置动画执行的操作

     _myView.backgroundColor = [UIColor blueColor];

     

     _myView.alpha = 0.5;

     

     CGRect frame = _myView.frame;

     frame.size.height = 300;

     _myView.frame = frame;

    

    

    // 设置翻转效果:只是视觉效果,并不是一个真正 立体的事物发生了翻转

    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:_myView cache:YES];

    

    

    // 交换两个 子视图的层次结构

    [_myView exchangeSubviewAtIndex:0 withSubviewAtIndex:1];

    

// 4.标记动画的结尾

    [UIView commitAnimations];

    

}


#pragma mark - 设置颜色

-(void)setColor:(UIColor *)color{

    

// 设置背景颜色 65 174 57

// RGB 256色阶 0 - 255

// 方法中的 取值范围 0.0 - 1.0

    

//    UIColor *fixedColor = [UIColor colorWithRed:65/255.0 green:174/255.0 blue:57/255.0 alpha:1];


    UIColor *randColor = [UIColor colorWithRed:(rand() % 10 * 0.1) green:(rand() % 10 * 0.1) blue:(rand() % 10 * 0.1) alpha:1.0];

    

    color = [UIColor colorWithWhite:0.5 alpha:0.8];


    self.myView.backgroundColor = randColor;


 //转换16进制颜色

    NSString *background_color = @"#e6e6e6";

    long red = strtoul([[background_color substringWithRange:NSMakeRange(1, 2)]UTF8String], 0, 16);

    long green = strtoul([[background_color substringWithRange:NSMakeRange(3, 2)]UTF8String], 0, 16);

    long blue = strtoul([[background_color substringWithRange:NSMakeRange(5, 2)]UTF8String], 0, 16);

    //    NSLog(@"%ld  — %ld —%ld",red ,green ,blue);

    

    self.myView.backgroundColor = [UIColor colorWithRed:red/255.0f

                                                 green:green/255.0f

                                                  blue:blue/255.0f

                                                 alpha:1.0];


}


#pragma mark - 方法集合


/**

  调用一个方法 附带id参数, 延迟多少秒触发

 [self performSelector:@selector(changeViewHierachy:) withObject:subView1 afterDelay:3.0];

 


 

 */



#pragma mark - 搭建界面,九宫格

-(void)setApp{

#define kAppViewW 80

#define kAppViewH 90

#define kColCount 3

#define kStartY   20


// 320 - 3 * 80 = 80 / 4 = 20

CGFloat marginX = (self.view.bounds.size.width - kColCount * kAppViewW) / (kColCount + 1);

CGFloat marginY = 10;


for (int i = 0; i < 12; i++) {

    //

    // 0, 1, 2 => 0

    // 3, 4, 5 => 1

    int row = i / kColCount;

    

    //

    // 0, 3, 6 => 0

    // 1, 4, 7 => 1

    // 2, 5, 8 => 2

    int col = i % kColCount;

    

    CGFloat x = marginX + col * (marginX + kAppViewW);

    CGFloat y = kStartY + marginY + row * (marginY + kAppViewH);

    

    UIView *appView = [[UIView alloc] initWithFrame:CGRectMake(x, y, kAppViewW, kAppViewH)];

    appView.backgroundColor = [UIColor redColor];

    [self.view addSubview:appView];

    

    }

}


#pragma mark-遍历字符串

-(void)forinStr{


    NSString *newStr = @"AbdcdddccddA00";

    NSString *temp = nil;

    for(int i =0; i < [newStr length]; i++)

    {

        temp = [newStr substringWithRange:NSMakeRange(i, 1)];

        if ([temp isEqualToString:@"A"]) {

            NSLog(@"%d个字是:%@", i, temp);

        }

    }


    NSString *str = @"Abdcdddccdd00";

    for(int i = 0; i < [newStr length]; i++)

    {

        unichar temp = [str characterAtIndex:i];

        if (temp == 'A') {

            NSLog(@"%d个字符是:%c", i, temp);

        }

    }


}


#pragma mark-  拆分字符串

-(void)breakUpString{

    

/*

    //原始字符串切分

    NSString *url=@"http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500";

    NSArray *comp1 = [url componentsSeparatedByString:@"?"];

    NSString *query = [comp1 lastObject];

    NSArray *queryElements = [query componentsSeparatedByString:@"&"];

    for (NSString *element in queryElements) {

        NSArray *keyVal = [element componentsSeparatedByString:@"="];

        if (keyVal.count > 0) {

            NSString *variableKey = [keyVal objectAtIndex:0];

            NSString *value = (keyVal.count == 2) ? [keyVal lastObject] : nil;

        }

    }

*/

 

//原始字符串切分    

//http://172.16.49.224:7087/info/wap/qrcodepay/downloadclient.html?MERC_ID=888009941110054&USR_OPR_NO=1025497115

//MERCID  OPRNO


NSString *urlStr=@"http://172.16.49.224:7087/info/wap/qrcodepay/downloadclient.html?MERC_ID=888009941110054&USR_OPR_NO=1025497115";

NSArray *compTemp = [urlStr componentsSeparatedByString:@"?"];

NSString *myQuery = [compTemp lastObject];

NSArray *myQueryElements = [myQuery componentsSeparatedByString:@"&"];


NSString *MERCIDtemp = [myQueryElements objectAtIndex:0];

NSArray *keyVal1 = [MERCIDtemp componentsSeparatedByString:@"="];

NSString *MERCIDStr = [keyVal1 lastObject];


NSString *OPRNOtemp = [myQueryElements lastObject];

NSArray *keyVal2 = [OPRNOtemp componentsSeparatedByString:@"="];

NSString *OPRNOStr = [keyVal2 lastObject];



//iOS7.0及以后才能用

NSString *myURL = @"http://172.16.49.224:7087/info/wap/qrcodepay/downloadclient.html?MERC_ID=888009941110054&USR_OPR_NO=1025497115";

NSURLComponents *components = [NSURLComponents componentsWithString:myURL];

NSNumber *pageOneValue = nil;

NSNumber *pageTwoValue = nil;

for(NSURLQueryItem *item in components.queryItems)

{

    if([item.name isEqualToString:@"MERC_ID"]){

        pageOneValue = [NSNumber numberWithInteger:item.value.integerValue];

    }

    if ([item.name isEqualToString:@"USR_OPR_NO"]){

        pageTwoValue = [NSNumber numberWithInteger:item.value.integerValue];

    }

}


    

}



#pragma mark - 创建导航控制器(AppDelegate里面进行的

    rootViewController *roorVC = [[rootViewController alloc] init];

    UINavigationController *navigationCtrl = [[UINavigationController alloc] initWithRootViewController:roorVC];

    self.window.rootViewController = navigationCtrl;

    

    

#pragma mark - 窗口

    /**

     *  Xcode 6.0 版本之前,空的应用程序模板,没有 main.storyboard 主界面,也没有创建好窗口。

     *

     *  需要使用这样的纯代码设置,需要删除 main.storyboard ViewController

     *  并且在工程设置里面,修改 Main Interface -> 设置为空

     */

    // 1.创建了一个window对象,window的大小是手机屏幕的大小

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    

    // 设置背景颜色

    self.window.backgroundColor = [UIColor whiteColor];

    

    // 让窗口成为主窗口并且可见。  主窗口(能够接收事件的窗口)

    [self.window makeKeyAndVisible];

    

    

#pragma mark - UIView 视图

    UIView *baseView = [[UIView alloc] initWithFrame:CGRectMake(10, 200, 300, 200)];

    baseView.backgroundColor = [UIColor redColor];

    // clipsToBounds 默认为NO。设为YES,会裁剪超出视图边界的内容和子视图

    baseView.clipsToBounds = YES;

    // 给一个视图对象 添加子视图

    // self.window 会持有子视图的对象所有权

    [self.window addSubview:baseView];

    

    // 一般情况下, frame Bounds 宽高一样。 特殊情况?

    

    // Frame得到的位置,是以它的父视图为参照

    NSLog(@"frame : %@", NSStringFromCGRect(baseView.frame));

    

    // Bounds得到的位置,是以它本身为参照

    NSLog(@"bounds : %@", NSStringFromCGRect(baseView.bounds));

    

    // 中点的位置坐标,是相对于父视图来计算的

    NSLog(@"center : %@", NSStringFromCGPoint(baseView.center));

    

    // 改变中点,会改变视图的位置

    //    baseView.center = CGPointMake(260, 400);

    



- (void)test:(UIView *)testView {

    // viewWithTag: 检索视图树,是否有视图的 tag 匹配

    UIView *searchView = [testView viewWithTag:3003];


    searchView.backgroundColor = [UIColor cyanColor];

    testView.hidden = YES;

    // 将一个视图从父视图上移除

    [testView removeFromSuperview];

    // 获取父视图

    UIView *superView = searchView.superview;

    // 获取所有的子视图

    NSArray *subViews = superView.subviews;

    NSLog(@"子视图 : %@", subViews);


}



- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值