这是我学习UI,感觉哪里难点,易错点,以及一些不容易记住的点,来和大家分享,也希望大家可以为我指正
- [self.num1 resignFirstResponder] 注册成为第一响应者
- int sum = s1.intValue+[s2 intValue]将对象转化成为int类型
- [self.view endEditing:YES]当前的视图辞去第一响应者
- UITextField有时不会弹出键盘 commond+k
- NSLog(@”%@”,NSStringFromCGRect(range));
- Frame不能直接更改值:采用以下方式更改
- CGRect frame=self.Button.frame;
- frame.origin.x-=10;
9.self.Button.frame=frame;
10.在更改frame,有的时候设置use Auto Layout可能导致按钮不起作用
11.在设置不同的控件,界面,controller时可以通过tag值进行区分
12.首位式动画
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationRepeatCount:2];
设置动画变化的内容
[UIView commitAnimations];
13.block动画的使用
[UIView animateWithDuration:1 animations:^{
在这里写需要被动画的代码
}];,不管是block还是手尾式动画,都是UIView的类方法
14.frame和bounds可以代表一个控件的大小.如果修改frame,控件是保持左上角不变,如果修改的是bounds,控件保持中心点不变.
15. 移动一行代码快捷键: cmd + option + [
16.更改图片的大小位置,使用transform,自带动画效果
self.pic.transform = CGAffineTransformTranslate(self.pic.transform, 0, -10);//更改偏移量
self.pic.transform = CGAffineTransformRotate(self.pic.transform,M_PI_4);//更改角度
self.pic.transform = CGAffineTransformScale(self.pic.transform, 1.2, 1.2);//更改大小
17. if (self.myimgView.isAnimating) {
return;
}//判断如果动画正在播放就直接返回,而不执行按钮的点击事件
_myimgView.animationImages = arr;,设置UIImageView的动画数组
_myimgView.animationDuration = 0.05*count;//动画播放时间
_myimgView.animationRepeatCount = 2;//动画重复次数
[_myimgView startAnimating];//开始动画
动画结束的时候记得清空动画数组
[self performSelector:@selector(clear) withObject:nil afterDelay:(0.05*2*count)];
-(void)clear{
self.myimgView.animationImages = nil;//在动画执行之后清空
}
18. UIImage *image = [UIImage imageNamed:str];相比UIImage *img = [UIImage imageWithContentsOfFile:path];浪费内存
[NSBundle mainBundle]根据图片的名称获取图片在手机上的存储路径
19. self.preBtn.enabled = (self.index != 0);直接将判断结果当做使能条件
20.九宫格的关键
//行号为
int row = i/colNum;
//列号
int col = i%colNum;
CGFloat leftMargin = (self.view.frame.size.width - colNum*width-(colNum-1)*xMargin)/2;
CGFloat x = lefeMargin + col *(xMargin + width);
CGFloat y = topMargin + row *(yMargin + heigth);
21.使用tranform,进行复位
- (IBAction)rest {
self.iconImage.transform = CGAffineTransformIdentity;
}
22. 对于push和pop,意味着调用UINavigationController的push-、pop-、或者set-方法来修改视图控制器的堆栈
23. 对于切换tabs,意味着修改UITabBarController的selectedIndex或selectedViewController属性
24. 对于modal,则意味着调用[UIViewController presentViewController: animated: completion: ]或[UIViewController dismissViewControllerAnimated: completion: ]。
25. UI控件初始化问题:initWithFrame和initWithCoder、aweakFromNib的执行
1>.(1)纯代码创建的UI控件不执行aweakFromNib方法和 initWithCoder方法。
(2)layoutSubciews方法在控件初始化完成后(自身和子控件的实例化结束)调用,方法中能获得到当前控件的frame,以便于给子控件布局。如有子控件,调用两次。
2.> (1)通过Xib创建UI控件,不会调用init和initwith方法。
(2)initWithCoder和 aweakFromNib 在这里作用相同,都被系统调用, 当从xib/Storybord文件加载 UIView 的时候,initWithCoder 会执行。
25. 如果你是直接基于 frame 来布局的,你应该确保在初始化的时候只添加视图,而不去设置它们的frame,把设置子视图 frame 的过程全部放到 layoutSubviews 方法里:不要依赖前一次的计算结果,应该总是根据当前最新值来计算
26.约束问题:
如果你是基于 Auto Layout 约束来进行布局,那么可以在 commonInit 调用的时候就把约束添加上去,不要重写 layoutSubviews 方法,因为这种情况下它的默认实现就是根据约束来计算 frame。最重要的一点,把 translatesAutoresizingMaskIntoConstraints 属性设为 NO,以免产生 NSAutoresizingMaskLayoutConstraint 约束,如果你使用 Masonry 框架的话,则不用担心这个问题,mas_makeConstraints 方法会首先设置这个属性为 NO:,不太懂呢
27. [self.view sizeToFit] 我们一般在不方便手动布局的时候才调用sizeToFit方法,下面我们就具体的看看哪些场合,不适合手动布局:
1.navigationBar中对navigationItem的设置,(添加两个视图以上的控件到Item)
2. toolBar中的对UIBarButtonItem的设置(一般我们还要添加弹簧控件)
上述两种场合就可以用sizeToFit这个方法,来让系统给我们做自动布局。(注意:如果就添加一个控件的话,我们直接设置fram也是可以的)
3.在tabBar中我们不能手动的添加的子控件,因为tabBar是根据控制器系统默认自动添加的tabBarItem。(猜想系统可能也会自动调用了这个方法)
4.UILabel中添加文字,然后让调整label的大小来适应文字,我们也调用sizeToFit的方法
28.通过取色计设置颜色
float red = (float)125 / 255;
float green = (float)125 / 255;
float blue = (float)125 / 255;
UIColor *col = [UIColor colorWithRed:red green:green blue:blue alpha:1];
29. [UITextField对象 setKeyboardType:UIKeyboardTypeNumberPad];设置键盘
30. [UITextField对象 setBorderStyle:UITextBorderStyleNone];设置边框类型
31. }completion:^(BOOL finished) {是block动画完成时候调用的代码
32. [UITextField对象setPlaceholder:@"请输入…"];
[UITextField对象setSecureTextEntry:YES]; 密码文本框的文字必须是暗文显示(掩码显示) Secure属性
[UITextField对象setBorderStyle:UITextBorderStyleRoundedRect];边框是圆的
33. [self.view endEditing:YES];记得编辑完毕退出键盘,增强用户体验
34.使用UIView时候记得,如果有按钮的点击事件,记得打开用户交互userInteractionEnabled
35. [self.answerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];清楚视图里面的所有子控件
36.按钮点击的大图效果(即能放大也能缩小)
- (IBAction)clickMainBtn:(UIButton *)sender {
if (self.cover==nil) {
[self showBig];
}else{
[self showSmall];
}
}
-(void)showBig{
UIButton *cover = [[UIButton alloc]init];
cover.frame = self.view.frame;
cover.backgroundColor = [UIColor blackColor];
cover.alpha = 0;
[self.view addSubview:cover];
CGFloat width = self.view.frame.size.width;
CGFloat height = width;
CGFloat x = 0;
CGFloat y = (self.view.frame.size.height - width)/2;
[cover addTarget:self action:@selector(showSmall) forControlEvents:UIControlEventTouchUpInside];
[UIView animateWithDuration:2 animations:^{
cover.alpha = 0.5;
self.mainIconBtn.frame = CGRectMake(x, y, width, height);
[self.view bringSubviewToFront:self.mainIconBtn];
}];
}
-(void)showSmall{
[UIView animateWithDuration:2 animations:^{
self.mainIconBtn.frame = self.orign;
self.cover.alpha = 0;
} completion:^(BOOL finished) {
[self.cover removeFromSuperview];
}];
}
37.添加定时器.
-(void)addTimer{
self.myTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(playPic) userInfo:nil repeats:YES];
//为什么??
[[NSRunLoop mainRunLoop]addTimer:self.myTimer forMode:NSRunLoopCommonModes]; //必须更改消息循环模式
}
-(void)removeTimer{
[self.myTimer invalidate];
}
38.设置pageController的两种字体颜色
page.pageIndicatorTintColor = [UIColor blueColor];
page.currentPageIndicatorTintColor = [UIColor redColor];
39.添加父控件的两种独特的形式
[self.view insertSubview:page belowSubview:self.sView];
[self.view insertSubview:page aboveSubview:self.sView];
40.设置scrollView的偏移量
[self.sView setContentOffset:CGPointMake(num*self.sView.frame.size.width, 0) animated:YES];
41.设置pageController的几个关键因素
1)self.myPage.currentPage(一般在scrollView的代理方法scrollViewDidScroll里面实现)
2)page.numberOfPages
3)在scrollView里面设置定时器
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
[self addTimer];
}//[self.sView setContentOffset:CGPointMake animated:YES];通过设置偏移量开始偏移时调用和
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
[self removeTimer];
}//停止拖拽(手动拖拽)
42. scrollView 默认是不能滚动的,需要设置一个参数才能滚动contentSize
43. 设置ScrollView的最大和最小缩放比例。
self.scrollView.maximumZoomScale = 3; self.scrollView.minimumZoomScale = 0.4;
44.通过scrollView设置放大和缩小图片
self.sview.delegate = self;
self.sview.minimumZoomScale = 0.3;
self.sview.maximumZoomScale = 2;
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
return scrollView.subviews[0];
}
45.通过这只偏移滚动时,最后一张不加动画效果
if (self.pageControl.currentPage!=4) {
[self.sview setContentOffset:po animated:YES];
}else{
[self.sview setContentOffset:po];
}
46.设置当图片滚动一半的时候改变pageConteoller的页码的方式:
CGFloat s = self.sview.contentOffset.x;
CGFloat x = self.sview.frame.size.width;
int num1 = (s+0.5*x)/x;
self.pageControl.currentPage = num1;
47.设置状态栏
}
-(BOOL)prefersStatusBarHidden{
return YES;
}
48.设置两栏cmd+option+回车,取消两栏option+回车
49.更改一边的设置option+右边选择左边的
50.直接创建的tab记得设置数据源self.tableView.dataSource = self;