您的位置:首页 > 移动开发 > IOS开发

iOS 基础2

2016-06-27 22:19 381 查看
    // UIImageView
    
    // 1. 创建对象
    UIImageView *imageView = [[UIImageView
alloc] initWithFrame:(CGRectMake(10,
100, 256,
192))];
    
    // 打开用户交互
    imageView.userInteractionEnabled =
YES;
    
    
    
    // 2. 添加图片
//    imageView.image = [UIImage imageNamed:@"avatar.jpg"]; // imageNamed
这种方式图片必须在工程中, 如果图片是
非png格式,一定要加后缀.jpg  .xxx
    
    
    // UIImage 对象的路径创建方法
    imageView.image = [UIImage
imageWithContentsOfFile:@"/Users/wushumin/Pictures/sai专用文件夹/avatar.jpg"];
// 根据文件路径创建
    
    
    // 3. 把图片视图添加到 self.view

    [self.view
addSubview:imageView];
    
    // 4. 释放
    [imageView release];
    
    
    
    
    // 手势识别器
重点:
    // 手势识别器
是封装了一系列的触摸事件,来表示某一个事件
    // UIView 继承自 UIResponder
,虽然可以响应用户的触摸操作,但是太麻烦。因此苹果公司
设计了一系列手势识别器方便我们调用
    
    // 只要一个视图上面添加了手势识别器,就可以识别出该手势。
    // 常用手势识别器有七种:
    
    // 1. tap 轻拍手势
    // 1. 创建
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer
alloc] initWithTarget:self
action:@selector(tapAction:)];
    
    // 2. 设置属性
比如:轻拍手势有 轻拍几次
几根手指轻拍
    tap.numberOfTapsRequired =
1; //
默认为1,拍一次
    tap.numberOfTouchesRequired =
1; //
默认为1,一根手指
    
    // 3. 添加给某个视图
//    [imageView addGestureRecognizer:tap];
    
    // 4. 释放
    [tap release];
    
    
    // 2. longPress
长按手势
    // 创建
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer
alloc] initWithTarget:self
action:@selector(longPressAction:)];
    
    // 设置属性
最短长按时间
    longPress.minimumPressDuration =
2;// 2秒
    
    // 添加
//    [imageView addGestureRecognizer:longPress];
    
    [longPress release];
    
    
    
    // 3. pan 平移手势
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer
alloc] initWithTarget:self
action:@selector(panAction:)];
    
//    [imageView addGestureRecognizer:pan];
    
    [pan release];
    
    
    // 4. rotation
旋转手势
    UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer
alloc] initWithTarget:self
action:@selector(rotationAction:)];
    
//    [imageView addGestureRecognizer:rotation];
    
    
    // 5. pinch  捏合手势
(缩放手势)
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer
alloc] initWithTarget:self
action:@selector(pinchAction:)];
    
//    [imageView addGestureRecognizer:pinch];
    [pinch release];
    
    
    
    // 6. swipe 轻扫手势
    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer
alloc] initWithTarget:self
action:@selector(swipeAction:)];
    
    // 轻扫手势默认向右轻扫,
    swipe.direction =
UISwipeGestureRecognizerDirectionRight;
    
//    [imageView addGestureRecognizer:swipe];
    [swipe release];
    
    
    // 7. 屏幕边缘移动(轻扫)
    UIScreenEdgePanGestureRecognizer *screenEdgePan = [[UIScreenEdgePanGestureRecognizer
alloc] initWithTarget:self
action:@selector(sceenEdgePanAction:)];
    
    
    // 屏幕边缘移动必须设置,移动方向
    screenEdgePan.edges =
UIRectEdgeLeft; //
从屏幕左边移动
    
    // 注意:
屏幕边缘移动手势,只有当从屏幕边缘移动的时候才触发
    
    [imageView addGestureRecognizer:screenEdgePan];
    [screenEdgePan release];
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    // Do any additional setup after loading the view.
}

// 7. sceenEdgePanAction:
- (void)sceenEdgePanAction:(UIScreenEdgePanGestureRecognizer *)sep
{
    
    if (sep.edges ==
UIRectEdgeLeft) {
        
        NSLog(@"从屏幕左边轻扫");
    }
    
    
}

// 6. swipeAction:
- (void)swipeAction:(UISwipeGestureRecognizer *)swipe
{
    
    // 判断方向
    if (swipe.direction ==
UISwipeGestureRecognizerDirectionRight) {
        
        NSLog(@"向右轻扫");
        
        [UIView
animateWithDuration:0.5
animations:^{
            
            CGRect rec = swipe.view.frame;
    
            swipe.view.frame =
CGRectMake(rec.origin.x +
150, rec.origin.y, rec.size.width,
rec.size.height);
            
        }];
        
        
        
        
    }
    
    
}

// 5. pinchAction:
- (void)pinchAction:(UIPinchGestureRecognizer *)pinch
{
    // 1. 获取缩放比例
    CGFloat scale = pinch.scale;
    
    // 2. 进行缩放变换
    pinch.view.transform =
CGAffineTransformScale(pinch.view.transform, scale, scale);
    
    // 3. 缩放比例 1:1    1.0
    pinch.scale =
1.0;
    
    
    
}

// 4. rotationAction:
- (void)rotationAction:(UIRotationGestureRecognizer *)rotation
{
    // 1. 获取旋转角度
    CGFloat angle = rotation.rotation;
    
    // 2. 变换视图
    rotation.view.transform =
CGAffineTransformRotate(rotation.view.transform, angle);
    

    // 3. 角度归 0
    rotation.rotation =
0;
    
}

// 3. panAction:
- (void)panAction:(UIPanGestureRecognizer *)pan
{
    // 获取pan所在的视图
    UIView *view = pan.view;
    
    // 获取
手势在视图上变换
    CGPoint p = [pan
translationInView:view];
    
    // 视图
跟随手指移动
//    view.transform = CGAffineTransformTranslate(view.transform,p.x,p.y);
    
//    pan.view.transform = CGAffineTransformTranslate(pan.view.transform, p.x, p.y);
    
    
    // 变换方法有两个方法
    // 一种是带有 make的方法CGAffineTransformMakeTranslation ,
该方法以原始状态 为基准进行变换,中途如果手势停止,下次变换以原来位置为基准。
    
    // 一种是
不带 make的方法
    // CGAffineTransformTranslate
以上一次变换为基准,需要注意的是。 以上一次变换为基准,是在每一次的变换基础上
又 加上一个值,因此每次变换结束,我们都要把变换值 “清零” ——
移动需要 置为(0,0) ,缩放需要置为1.0
比例, 旋转需要
置为 0° 度。
    
    
    
    // 平移变换置为0
//    [pan setTranslation:(CGPointZero) inView:view];
    
    
    // 以初始状态为基准变换的方法
    view.transform =
CGAffineTransformMakeTranslation(p.x, p.y);
    

}

// 2. longPress
- (void)longPressAction:(UILongPressGestureRecognizer *)longPress
{
    // 手势识别器的状态
    // possible 可能为某个手势状态 --》 recognized
识别状态 ——》  begin
开始状态 ——》【changed】改变状态 ——》 end
结束状态
    
    //  begin ----> cancle
取消状态
    
    // 长按手势是持续性手势
分为长按开始 刚被识别为长按手势
    // 长按结束
: 手指离开屏幕
    
    if (longPress.state ==
UIGestureRecognizerStateBegan) {
        
        NSLog(@"长按手势开始");
    }
    
    
    
    
}

// 1. tap
- (void)tapAction:(UITapGestureRecognizer *)tap
{
    
    NSLog(@"轻拍操作");
    
}

// 加载数据
- (void)setData
{
    // 1. plist 文件路径
    NSString *filePath = [[NSBundle
mainBundle] pathForResource:@"Students"
ofType:@"plist"];
    
    // 2. 根据
根节点创建数据对象
    NSArray *rootArray = [NSArray
arrayWithContentsOfFile:filePath];
    
    // 3. 给 studentArray
开辟空间
    self.studentArray = [NSMutableArray
array];
    
    // 4. 把
字典里面的数据存放到 student 对象里面,再把student
对象,存放到数组里面
    for (NSDictionary *dic
in rootArray) {
        
        // (1) 创建student
对象
        Student *student = [[Student
alloc] init];
        
        // (2) 给student
对象赋值
       // 通过 kvc
赋值
        [student setValuesForKeysWithDictionary:dic];
        
        // 执行了多次  setValueForKey:
直到全部赋值
        //  如果
数据 和 model key值不照应,执行 setValueForKey
,找不到对应的key值,就会出错。因此
数据 和 model
的key值一定要照应。
        
        // (3) 把赋值好的student
对象添加到数组里面
        [self.studentArray
addObject:student];
        [student release];
// 释放
    }
    
    
}

    // 1. 数据 
转 model
    // 2. 自定义单元格
    // 3. 多个单元格使用
    // 4. 自适应高度
    
    
    // 一、
数据转模型
    // 数据直接拿来存储,比如我们的学生信息存储
在字典里面,在使用的时候,特别麻烦,要通过key值取值,并且可维护性低。没有体现面向对象的思想。
    // model  mvc
框架里面的 model 层(数据模型层),把学生信息,映射为 model类——Student类,体现了面向对象的面向框架的编程思想,易于维护,且存取方便。
    
    //  所做的操作:把
字典里面的值  放入到 student
里面。
    
    // - (void)setData;
加载数据方法
    [self setData];
    NSLog(@"%@",
self.studentArray);
    
    
    
    // 二、
自定义单元格
    // 当单元格需要展示的内容比较复杂时,我们通常创建一个继承自UITableViewCell
的一个子类,作为自定义单元格。
    
    
    
    // 三、
多个单元格的混合使用
    // 在开发中,有时我们会根据数据的不同,来定义不同的单元格展示数据。
    // 多个单元格使用时的注意点:
    // 1. 要明确根据哪个因素,选择使用不同的单元格。比如:性别。
    // 2. 创建单元格时都要加上重用标识符
    // 3. 都使用重用机制
    
// 自适应高度
// 获取字符串高度
+ (CGFloat)heightForString:(NSString *)string
{
    // 1. 获取字体属性,
字号, 字体名
等等,存储到字典里面
    // object: introduceLabel
使用的字体对象
    // key:  字体属性 NSFontAttributeName
    NSDictionary *dic =
@{NSFontAttributeName:[UIFont
systemFontOfSize:18]};
    
    
    // 2. 使用字符串实例方法,绘制一个矩形,
返回值为cgrect
    // size: 允许绘制的最大宽高,如果固定宽度,则高度自适应,如果固定高度,则宽度自适应。前者,超过最大高度,则停止绘制,后者,超过最大宽度,停止绘制。
    // attributes:
绘制矩形时,使用的字体信息
    // options: 绘制基线,通常使用原始基线。
    // context: 绘制上下文。通常给nil。
    CGRect bounds = [string
boundingRectWithSize:(CGSizeMake(200,
10000)) options:(NSStringDrawingUsesLineFragmentOrigin)
attributes:dic context:nil];
    
    // 3. 返回bounds
的高度
    return bounds.size.height;
}

// 单元格高度
+ (CGFloat)cellHeightForStudent:(Student *)student
{
    // 单元格总高度 =
原有控件固定高度 + 自适应高度。
    CGFloat cellHeight =
170 + [BoyTableViewCell
heightForString:student.introduce];
    
    // 如果自适应后高度 >
原本布局高度,则使用自适应高度,否则使用原本布局高度
    
    return cellHeight >
200 ? cellHeight : 200;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: