UI基础UIView常见属性及方法

1.NSBundle

1> 一个NSBundle代表一个文件夹,利用NSBundle能访问对应的文件夹

2> 利用mainBundle就可以访问软件资源包中的任何资源

3> 模拟器应用程序的安装路径

/Users/aplle/资源库/Application Support/iPhone Simulator/7.1/Applications

2.UIImageView和UIButton

1> 使用场合

* UIImageView: 如果仅仅是显示图片,不需要监听图片的点击

* UIButton: 既要显示图片,又要监听图片的点击

2> 相同:能显示图片

3> 不同点

* UIButton能处理点击事件, UIImageView不能处理点击事件

* UIButton既能显示图片, 又能显示文字

* UIButton能同时显示两张图片

* UIButton继承自UIControl, 因此默认就能处理事件

* UIImageView继承自UIView, 因此默认就不能处理事件

3.Xcode文档安装路径

/Applications/Xcode.app/Contents/Developer/Documentation/DocSets

4.Xcode模拟器安装路径

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs

5,UIView的常?见属性

? @property(nonatomic,readonly) UIView *superview;

? 获得?自?己的?父控件对象

? @property(nonatomic,readonly,copy) NSArray *subviews;

? 获得?自?己的所有?子控件对象

? @property(nonatomic) NSInteger tag;

? 控件的ID\标识,?父控件可以通过tag来找到对应的?子控件

? @property(nonatomic) CGAffineTransform transform;

? 控件的形变属性(可以设置旋转?角度、?比例缩放、平移等属性)

在OC中,通过transform属性可以修改对象的平移、缩放比例和旋转角度

常用的创建transform结构体方法分两大类

(1) 创建“基于控件初始位置”的形变

CGAffineTransformMakeTranslation(平移)

CGAffineTransformMakeScale(缩放)

CGAffineTransformMakeRotation(旋转)

(2) 创建“基于transform参数”的形变

CGAffineTransformTranslate

CGAffineTransformScale

CGAffineTransformRotate

补充:

在OC中,所有跟角度相关的数值,都是弧度值,180° = M_PI

正数表示顺时针旋转

负数表示逆时针旋转

提示:由于transform属性可以基于控件的上一次的状态进行叠加形变,例如,先旋转再平移。因此在实际动画开发中,当涉及位置、尺寸形变效果时,大多修改控件的transform属性,而不是frame、bounds、center 。

@property(nonatomic) CGRect frame; 控件所在矩形框在?父控件中的位置和尺?寸(以?父控件的左上?角为坐标原点)

@property(nonatomic) CGRect bounds; 控件所在矩形框的位置和尺?寸(以?自?己左上?角为坐标原点,所以bounds的x\y?一般

为0)

@property(nonatomic) CGPoint center;

控件中点的位置(以?父控件的左上?角为坐标原点)

6,UIView的常?见?方法

? - (void)addSubview:(UIView *)view;

? 添加?一个?子控件view

? - (void)removeFromSuperview;

? 从?父控件中移除

? - (UIView *)viewWithTag:(NSInteger)tag;

? 根据?一个tag标识找出对应的控件(?一般都是?子控件)

7,动画的两种创建方式

1)

//开始动画

[UIView beginAnimations:nil context:nil];

// 执行动画内容

self.headImageView.bounds=bounds;

// 设置动画时间

[UIView setAnimationDuration:2.0];

// 提交动画

[UIView commitAnimations];

2) // 一般用这种方式

UIView animateKeyframesWithDuration:<#(NSTimeInterval)#> delay:<#(NSTimeInterval)#> options:<#(UIViewKeyframeAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>

8,汤姆猫中动画执行代码顺序

// 1,设置图片数组

self.tom.animationImages = images;

// 2.设置播放次数(1次)

self.tom.animationRepeatCount = 1;

// 3.设置播放时间

self.tom.animationDuration = images.count * 0.05;

// 4,开始动画

[self.tom startAnimating];

性能问题

// 加载图片

// imageNamed: 有缓存(传入文件名)

//        UIImage *image = [UIImage imageNamed:filename];

解决办法

// imageWithContentsOfFile: 没有缓存(传入文件的全路径)

NSBundle *bundle = [NSBundle mainBundle];

NSString *path = [bundle pathForResource:filename ofType:nil];

UIImage *image = [UIImage imageWithContentsOfFile:path];

动画放完1秒后清除内存

CGFloat delay = self.tom.animationDuration + 1.0;

[self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:delay];

代码图片浏览器动态代码:

模型类

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface LLPic : NSObject

// 图片地址
@property (nonatomic, copy) NSString *icon;

// 图片
@property (nonatomic, strong) UIImage *image;

// 描述
@property (nonatomic, copy) NSString *desc;

+ (instancetype)picWithDic:(NSDictionary *)dic;
- (instancetype)initWithDic:(NSDictionary *)dic;

+ (NSArray *)array;

@end
#import "LLPic.h"

@interface LLPic ()
{
    UIImage *_imageABC;
}
@end

@implementation LLPic

+ (NSArray *)array
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"images.plist" ofType:nil];

    NSArray *arrPic = [NSArray arrayWithContentsOfFile:path];
    NSMutableArray *arrPicMA = [[NSMutableArray alloc] initWithCapacity:arrPic.count];
    for (NSDictionary *dic in arrPic) {

        [arrPicMA addObject:[self picWithDic:dic]];
    }
    return arrPicMA;
}

- (UIImage *)image
{
    if (!_imageABC) {
        _imageABC = [UIImage imageNamed:self.icon];
    }
    return _imageABC;
}

- (instancetype)initWithDic:(NSDictionary *)dic
{
    if (self = [super init]) {

        [self setValuesForKeysWithDictionary:dic];
    }
    return self;
}

+ (instancetype)picWithDic:(NSDictionary *)dic
{
    return [[self alloc] initWithDic:dic];
}

@end

controller

#import "ViewController.h"
#import "LLPic.h"
@interface ViewController ()

// 属性值必须改为strong,如果联系IBOutLet则为week
@property (nonatomic, strong) NSArray *picView;
@property (nonatomic, strong) UILabel *headLab;
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) UIButton *leftBtn;
@property (nonatomic, strong) UIButton *rightBtn;
@property (nonatomic, strong) UILabel *footLab;
@property (nonatomic, strong) UIButton *leftRotationBtn; // 左旋转
@property (nonatomic, strong) UIButton *rightRotationBtn; // 右旋转
// 计数器
@property (nonatomic, assign) int index;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor purpleColor];

    [self loadPicView];
}

#pragma mark - 按钮点击事件
// 左点击
- (void)leftBtnClick
{
    self.index--;
    [self loadPicView];
}
// 右点击
- (void)rightBtnClick
{
    self.index++;
    [self loadPicView];
}

// 按钮旋转事件
- (void)rotationBtn:(UIButton *)btn
{
    [UIView animateWithDuration:0.2 animations:^{
        if (btn.tag == 20) {
            self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, M_PI_4);
        } else if (btn.tag == 40){
            self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, -M_PI_4);
        }

    }];
}

#pragma mark - 展示界面
- (void)loadPicView
{
    // 1,拿出模型对象

    LLPic *pic = self.picView[self.index];

    self.headLab.text = [NSString stringWithFormat:@"%d/%ld", self.index+1, self.picView.count];
    self.imageView.image = [UIImage imageNamed:pic.icon];
    self.footLab.text = pic.desc;

    self.leftBtn.enabled = (self.index != 0);
    self.rightBtn.enabled = (self.index != (self.picView.count-1));

    // 2,加载按钮
    [self creatRoationBtn];

}
#pragma mark - 懒加载控件,代码可读性强,并且提高性能
// headLab的加载
- (UILabel *)headLab
{
    if (!_headLab) {

        _headLab = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, 300, 30)];
        _headLab.textAlignment = NSTextAlignmentCenter;
        [self.view addSubview:_headLab];

    }
    return _headLab;
}

// imageView的加载
- (UIImageView *)imageView
{
    if (!_imageView) {

        _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(70, 70, 180, 180)];
        [self.view addSubview:_imageView];
    }
    return _imageView;
}

// leftBtn的加载
- (UIButton *)leftBtn
{
    if (!_leftBtn) {

        _leftBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        _leftBtn.frame = CGRectMake(0,125, 40, 40);
        [_leftBtn setBackgroundImage:[UIImage imageNamed:@"left_normal"] forState:UIControlStateNormal];
        [_leftBtn setBackgroundImage:[UIImage imageNamed:@"left_highlighted"] forState:UIControlStateHighlighted];
        [_leftBtn setBackgroundImage:[UIImage imageNamed:@"left_disable"] forState:UIControlStateDisabled];

        // 按钮点击事件
        [_leftBtn addTarget:self action:@selector(leftBtnClick) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:_leftBtn];
    }
    return _leftBtn;
}

// rightBtn的加载
- (void)creatRoationBtn
{
    _rightRotationBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    _rightRotationBtn.frame = CGRectMake(200,400,40, 40);
    [_rightRotationBtn setBackgroundImage:[UIImage imageNamed:@"right_rotate_normal"] forState:UIControlStateNormal];
    [_rightRotationBtn setBackgroundImage:[UIImage imageNamed:@"right_rotate_highlighted"] forState:UIControlStateHighlighted];
    _rightRotationBtn.tag = 20;
    [_rightRotationBtn addTarget:self action:@selector(rotationBtn:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_rightRotationBtn];

    _leftRotationBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    _leftRotationBtn.frame = CGRectMake(100,400,40, 40);
    [_leftRotationBtn setBackgroundImage:[UIImage imageNamed:@"left_rotate_normal"] forState:UIControlStateNormal];
    [_leftRotationBtn setBackgroundImage:[UIImage imageNamed:@"left_rotate_highlighted"] forState:UIControlStateHighlighted];
    _leftRotationBtn.tag = 40;
    [_leftRotationBtn addTarget:self action:@selector(rotationBtn:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_leftRotationBtn];

}
- (UIButton *)rightBtn
{
    if (!_rightBtn) {

        _rightBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        _rightBtn.frame = CGRectMake(280,125,40, 40);
        [_rightBtn setBackgroundImage:[UIImage imageNamed:@"right_normal"] forState:UIControlStateNormal];
        [_rightBtn setBackgroundImage:[UIImage imageNamed:@"right_highlighted"] forState:UIControlStateHighlighted];
        [_rightBtn setBackgroundImage:[UIImage imageNamed:@"right_disable"] forState:UIControlStateDisabled];

        [_rightBtn addTarget:self action:@selector(rightBtnClick) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:_rightBtn];
    }
    return _rightBtn;

}

// 描述lab
- (UILabel *)footLab
{
    if (!_footLab) {

        _footLab = [[UILabel alloc] initWithFrame:CGRectMake(10, 260, 300, 60)];
        _footLab.textAlignment = NSTextAlignmentCenter;
        _footLab.numberOfLines = 0;
        [self.view addSubview:_footLab];

    }

    return _footLab;
}

#pragma mark - 加载数据模型
- (NSArray *)picView
{
    if (!_picView) {

        _picView = [LLPic array];
    }
    return _picView;
}

@end

完成展示:

时间: 2024-10-24 22:34:45

UI基础UIView常见属性及方法的相关文章

UIView常见属性与方法

常见属性: @property(nonatomic,readonly) UIView    *superview; 获得自己的父控件对象 @property(nonatomic,readonly,copy) NSArray   *subviews; 获得自己的所有子控件对象 @property(nonatomic) NSInteger   tag; 控件的ID(标识),父控件可以通过tag来找到对应的子控件 @property(nonatomic) CGAffineTransform   tra

UIView常用属性与方法/UIKit继承结构

UIView常用属性与方法 @interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem> /** * 通过一个frame来初始化一个UI控件 */ - (id)initWithFrame:(CGRect)frame; // YES:能够跟用户进行交互 @property(nonatomic,getter=isUserInteractionEnabled) BOOL us

UIView 常见属性

UIView 常见属性 UIView 常见属性 NSArray *subviews 获取所有的子控件(前提必须是加载在该视图上) 数组的顺序决定着子控件的显示层级顺序(下标越大的,越显示在上面) UIView的常见方法 addSubview 添加一个子控件 使用这个方法添加的子控件会被塞到subViews数组的最后面 可以使用下面的方法调整子控件在subViews数组中的顺序 //将子控件view插入到subviews数组的index位置 -(void)insertSubview:(UIView

UIView常见属性总结

一 UIVIew 常见属性 1.frame 位置和尺寸(以父控件的左上角为原点(0,0)) 2.center 中点 (以父控件的左上角为原点(0,0)) 3.bounds 位置和尺寸(以自己的左上角为原点 (0,0)) 4.transform 形变属性(缩放,旋转) 5.backgroundColor 背景颜色 6.tag 标识(父控件可以根据这个标识找到对应的子控件,同一个父控件中的子控件不要一样) 7. hidden 设置是否要隐藏 8.alpha 透明度(0~1); 9.opaque 不透

Android UI之原生——(1)、Android UI入门及常见属性与现象

Android UI之原生--(1).Android UI入门及常见属性与现象 导读 :Android UI入门,对于很多人来讲都是比较简单的,教程也多如牛毛,但是这篇绝对和其他的不一样.从接触android开发就注定UI开发是一个一直需要研究的课题,简单的原生UI使用可能你已经掌握,也可能发现某些组件有着一些不爽,但是只要你搞懂原因,就可以了.实在觉得用着不爽,那么就让自己的UI开发能力变强,然后自己写个好点的.android UI开发需要先学会使用原生UI,然后在学会使用开源UI,最后才是自

iPone应用开发 UIView 常用属性和方法

iPone应用程序开发 UIView常用属性和方法 常用属性 alpha 视图的透明度0.0f - 1.0f backgroundColor 视图的背景颜色 subviews 子视图的集合 hidden 视图是否隐藏 tag 视图的唯一标示符,是一个整形数据 superview 视图的父视图 multipleTouchEnabled 是否开启多点触控 userInteractionEnable 是否响应触摸事件 常用方法 - (void)removeFromSuperview; //从父视图中删

UIApplication常见属性与方法总结--ios

UIApplication 1.简介 1> 整个应用程序的象征,一个应用程序就一个UIApplication对象,使用了单例设计模式 2> 通过[UIApplication sharedApplication]访问这个单例对象 2.常见用法     1> 设置图标右上角的红色提示数字 app.applicationIconBadgeNumber = 10; 2> 设置状态栏的样式 app.statusBarStyle = UIStatusBarStyleBlackOpaque; 3

UIView的常见属性和方法

- (void)viewDidLoad { [super viewDidLoad]; // 临时View UIView *temp = [[UIView alloc] init]; temp.frame = CGRectMake(0, 0, 100, 100); [self.view addSubview:temp]; //UIView的常见属性 //1. 获得自己的父控件 [temp superview]; //2. 获得自己所有的子控件对象 [temp subviews]; //3. 控件的

IOS开发UI基础UIView

主要介绍下UIView得基本概念和一些属性的介绍至于属性的用户后面会由详细的介绍 -.UIView基本概念 1.什么是控件? 屏幕上所有的UI元素都叫做控件 (也有很多书中叫做视图 组件) 比如 按钮(UIButton) 文本(UILabel)都是控件 控件的共同属性有哪些? 尺寸 位置 背景色 ........... 苹果将控件的共同属性都抽取到父类UIView中 所有的控件最终都继承自UIView中 UIBUtton UIView都继承自UIView 父控件.子控件 每个控件都是个容器 能够