您的位置:首页 > 产品设计 > UI/UE

UI基础UIView常见属性及方法

2014-11-18 21:38 411 查看
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


完成展示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: