zoukankan      html  css  js  c++  java
  • NSValue的个人想法

    通过下面的代码,又可以将NSValue转换成CGRect,CGPoint等类型的数值。

      CGRect imageRect = [[self.lockImageRectArray objectAtIndex:l] CGRectValue];

    通过NSValue就可以实现CGxxx类型的数值存储在NSMutable,NSDictionary类型的数组中。

    @interface NSValue (NSValueUIGeometryExtensions)
     
    + (NSValue *)valueWithCGPoint:(CGPoint)point;
    + (NSValue *)valueWithCGSize:(CGSize)size;
    + (NSValue *)valueWithCGRect:(CGRect)rect;
    + (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;
    + (NSValue *)valueWithUIEdgeInsets:(UIEdgeInsets)insets;
    + (NSValue *)valueWithUIOffset:(UIOffset)insets __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
     
    - (CGPoint)CGPointValue;
    - (CGSize)CGSizeValue;
    - (CGRect)CGRectValue;
    - (CGAffineTransform)CGAffineTransformValue;
    - (UIEdgeInsets)UIEdgeInsetsValue;
    - (UIOffset)UIOffsetValue __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
     
    @end
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"lockButton.png"]];
    imageView.frame = CGRectMake(10 * (l + 1) + imageView.frame.size.width * l, 120 +  50 * r, imageView.frame.size.width, imageView.frame.size.height);
    [self.lockImageRectArray addObject:[NSValue valueWithCGRect:imageView.frame]];
    [self addSubview:imageView];
     
     
    因为CGRect,CGPoint等不是NSObject的子类,因此不能够直接添加到NSMutableArray中,所以要先将其转换成NSObject的子类。NSValue类可以解决这个问题,见NSValue类的声明:
    感觉CGRect,CGPoint 没有从NSObject继承,是不是一种缺陷呢。nsvalue 起到的作用,就是一个在其它的面向对象语言中的object类型的壳子。
  • 相关阅读:
    HTTP状态码
    ADB server didn't ACK
    Android 手机震动
    Android 控制闪光灯
    UINavigationItem 设置UIBarButtonItem
    PhotoShop
    在指定时间调用某方法
    被忽视的TWaver功能(1)
    TWaver MONO Design中动画的导出与播放
    TWaver GIS在电信中的使用
  • 原文地址:https://www.cnblogs.com/wcLT/p/4707239.html
Copyright © 2011-2022 走看看