zoukankan      html  css  js  c++  java
  • 黑马IOS学习笔记

    1、模拟器返回Home键的快捷方式是 shift+命令键+H

    2、UIButtonTypeRoundedRect 这个在IOS7里面是不再支持了的。因为IOS7扁平化设计,这个是在IOS6下面的。

    3、viewWithTag 若有多个子控件view的tag值相同,则是按照添加的顺序来找的。而且用这个取view还有一个强转问题,因为viewWithTag返回的是通用的UIView,因为他不可能知道View中具体放的时何种view,所以只能返回通用的UIView 。  举例    UIButton * btn = (UIButton *)[self.view viewWithTag:10];

    4、找规律

    UIView元素的四个属性:

    frame :  位置 尺寸

    bounds: 尺寸

    center:  位置

    transform:位置 尺寸 角度

    ————————————————

    CGRect 由 CGRectMake 创建

    CGPoint 由 CGPointMake 创建

    CGAffineTransform 由 CGAffineTransformMake 创建 ,这个本身太繁杂,引申出三个具体的:

    CGAffineTransformMakeRotation  角度变换  CGAffineTransformMakeScale 比例变化   CGAffineTransformMakeTranslation 移动

    注意,CGAffineTransform是相对于原状态改变的,所以如果要想view每次运行都有相应的持续变化,需要持续不断的给transform赋新值。例如下,点击按钮使某view不断向上,需要第三方变量,如下处理

    @property(nonatomic,assign) CGFloat ty;

    _ty -= 50;

    someView.transform = CGAffineTransformMakeTranslation(0,_ty);  才可以。

    若不想用第三方变量,则用这个方法 CGAffineTransformTranslate(CGAffineTransform transform,CGFloat tx,CGFloat ty) 来进行。该方法是在某view元素的当时的transform为基础来改变状态的。例

    someView.transform = CGAffineTransformTranslate(someView.transform,0,-10); 一行代码就可以了,每次运行都会持续改变竖向位置。transform 的 tx ty 默认值都是0 

    同理,类比 CGAffineTransformMakeTranslation 和 CGAffineTranslate 还有

    CGAffineTransformMakeRotation 和 CGAffineTransformRotate:

    someView.transform = CGAffineTransformMakeRotation(M_PI_4)  运行时只会相对最初的原状态顺时针旋转45度一次,不论运行多少次。要想持续旋转

    someView.transform = CGAffineTransformRotate(someView.transform,M_PI_4) 则每运行一次都会持续顺时针旋转45度

    缩放也同理有两个:

    someView.transform = CGAffineTransformMakeScale(1.5,1.5) 运行时只会改变一次,长宽都会变为1.5倍

    someView.transform = CGAffineTransformScale(someView.transform,1.5,1.5) 每次运行都会长宽变为上一次的1.5倍,持续变化。

    5、代码精简 

    if(self.index == 0){  self.previous.enabled = NO;  }else{  self.previous.enabled = YES; }    // previous是一自定义的按钮

    可精简为 self.previous.enable = (self.index != 0);

    6、

    strong: 一般对象 包括 NSArray 等

    weak: UI控件

    assign: int 等基本类型

    7、从day324的第五节图片浏览器中得到的知识点

    1) 在文件上方可以定义宏,例如 #define kTime = @"abc"

    2)查找文件和替换文件的快捷键 command + f 

    3) 数据的 懒加载/延迟加载:将属性放在get方法中的初始化方法,即用到的时候再取数据。举例

    -(NSArray *) imageData {

      if(_imageData != nil){  // 数据初始化   }     // 这个判断是必须的 

          return _imageData;

    }

    8、plist文件名中不要以info字样开头,否则会和support files中文件相冲突

    9、获取文件的完整路径方式

      1) NSBundle * bundle = [NSBundle mainBundle]; 获得手机的主文件包。一个bundle就是一个文件包 

      2) String * path = [bundle pathForResource:@"文件名"   ofType:@"文件后缀"];    // 也可以文件名那里写全,后缀那里写个nil

           通过plilst文件构造Array     NSArray * array = [NSArray arrayWithContentsofFile: path];

    10、UIImage * image = [UIImage imageNamed:@"文件名"]  这个方法要注意,只适合加载小图。因为这个方法加载的图片会在内存中产生缓存,而且不容易释放。如果通过该方法加载大量大幅图片,内存很容易溢出,程序崩掉。

    替代的方式是  通过   [UIImage imageWithContentsofFile: 文件路径 ] 传入文件的全路径来创造图片,没有缓存

    11、UIImageView中有动画的一些相关属性,如下

    animationImages  传入UIImage 数组

    animationRepeatCounts 动画播放次数( 默认是0,无限播放)

    animationDuraion 动画播放时间。一个处理方式是每一帧播放时间相同 count*0.01

    startAnimating 开始播放动画

    12、处理加载动画图片过多,内存溢出的解决方案就是,在动画调用完毕,马上释放图片资源,也即释放animationImages,让someImageView.animationImages = nil;

    [self.someImageView performSelector:@selector(setAnimationImages)  withObject: nil  afterDelay: delay]; 这就释放了!!

    因为 这个方法等效于 [self.someImageView setAnimationImages:nil] 的这个setter函数!!

    也即 self.someImageView.animationImages = nil  或 _someImageView.animationImages = nil;

    这个 _someImageView 其实就是 getter函数方法的返回值!! 即: self.someImageView 即是 getter方法 !!所以 self.someImageView 与 _someImageView 是等价的!!!

    13、UIImageView 和 UIButton 的区别与相同

    相同点:都可以放图片

    不同点:UIButton 可以放多张图片 可以放文字 可以放监听 而图片UIImageView 不可以。两个类的关系如下:

    UIButton --> UIControl --> UIView

    UIImageView --> UIView 

    注意UIControl中有 perform 方法,所以 UIButton 中才可以继承!

    14、UIButton中,无法使用类似 [UIButton setFont]的方法来设置字体。细究一下,会发现,UIButton中有两个属性 UILabel * titleLabel 和 UIImageView * imageView

    所以调整字体大小是通过titleLabel这个属性来进行的,例如btn.titleLabel.font = [UIFont systemFontOfSize:12]; 既然有这个titleLabel的属性,那么自然也可以通过该属性设置按钮文本,即类似 btn.titleLabel.text = @"xxxx"; 但这是不安全和不推荐的,因为无法设置与按钮的状态相适应。正确的做法是用  [btn setTitle:@"xxx"  forState:] 方法。同理,自然也可以用 btn.imageView.image = 来进行图片设置,但与上面相同,这同样是不推荐的。推荐的方法还是 [btn setImage:  forState:] 和 [btn setBackgroundImage: forState:]

    可变字符串和可变数组的定义 

    NSMutableString * str = [NSMutableString string];

    NSMutableArray * array = [NSMutableArray array];

    int score = [self.scoreBtn titleForState:UIControlStateNormal].intValue;

    [self performSelector:@selector(next) withObject:nil afterDelay:1.0];

    15、UIScrollView 之上放一张大图,设置UIScrollView尺寸的方法

    self.onescrollview.contentSize =  CGSizeMake(600,600); 

    self.onescrollview.contentSize = self.oneimageview.frame.size;

    self.onescrollview.contentSize = self.oneimageview.image.size;

    如果UIScrollView无法滚动,可能是如下原因:

    1)没有设置 contentSize    2) 没有取消autolayout    3)scrollEnabled = NO    4)没有接收到触摸事件 userInteractionEnabled = NO

    UIScrollView 其内放置了整张图片,要拖线的话,可以点左侧第二栏那里按住Ctrl拖。

    // UIScrollView代码部分

    CGFloat contentH = CGRectGetMaxY(self.bottom.frame) + 10;   // bottom元素的底部Y值再加上10个元素

    self.scroll.contentSize = CGSizeMake(320, contentH); 

    self.scroll.scrollEnabled = YES

    //增加额外的滚动区域

    self.scroll.contentInset = UIEdgeInsetsMake(10, 0, 10, 0);  

    // 设置一开始滚动的位置

    self.scroll.contentOffset = CGPointMake(0, -70);

     16、UIScrollViewDelegate协议,可以在.h中,也可以放在 .m文件上方的 @interface xxxxController () <UIScrollViewDelegate>

    常用的代理协议方法:

    -(void) scrollViewWillBeginDragging:(UIScrollView *) scrollView;   // 开始拖拽

    -(void) scrollViewDidScroll:(UIScrollView *) scrollView;                 // 拖拽中

    -(void) scrollViewDidEndDragging:(UIScrollView *) scrollView   willDecelerate:(BOOL) decelerate   // 结束拖拽

    捏合放大缩小的步骤

    1、.m文件上方 @interface 后面 <UIScrollViewDelegate>

    2、viewDidLoad中 ,设置视图控制器为代理 self.scroll.delegate = self;

        设置放大缩小比例

        self.scroll.maximumZoomScale = 2.0;

        self.scroll.minimumZoomScale = 0.5;

    然后实现代理方法,返回要放大缩小的对象:

    -(UIView *) viewForZoomingInScrollView:(UIScrollView *) scrollView  // 捏合时调用。返回的对象就是捏合的对象。

  • 相关阅读:
    codeforces 455B A Lot of Games(博弈,字典树)
    HDU 4825 Xor Sum(二进制的字典树,数组模拟)
    hdu 1800 Flying to the Mars(简单模拟,string,字符串)
    codeforces 425A Sereja and Swaps(模拟,vector,枚举区间)
    codeforces 425B Sereja and Table(状态压缩,也可以数组模拟)
    HDU 4148 Length of S(n)(字符串)
    codeforces 439D Devu and Partitioning of the Array(有深度的模拟)
    浅谈sass
    京东楼层案例思维逻辑分析
    浅谈localStorage和sessionStorage
  • 原文地址:https://www.cnblogs.com/appzhang/p/4966963.html
Copyright © 2011-2022 走看看