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  // 捏合时调用。返回的对象就是捏合的对象。

  • 相关阅读:
    python中关于操作时间的方法(一):使用time模块
    size_t类型
    批量下载网络图片并zip打包
    遇到的java面试题
    jsp中button与submit的用法
    springmvc json字符串转化成json对象
    Cas 介绍及使用
    java中post时中文乱码
    mybatis使用generator生成对应的model、mapping配置文件、dao
    移动端接口:java写get方式访问数据(springmvc+spring。。。)
  • 原文地址:https://www.cnblogs.com/appzhang/p/4966963.html
Copyright © 2011-2022 走看看