`

NSValue包装对象指针,CGRect结构体等

 
阅读更多

http://blog.csdn.net/asianjiang/article/details/5708281

 

  1. @interface NSValue (NSValueUIGeometryExtensions)  
  2.    
  3. + (NSValue *)valueWithPointer:(const void *)pointer;//保存对象指针  
  4.    
  5. + (NSValue *)valueWithCGPoint:(CGPoint)point;//保存CGPoint结构体  
  6. + (NSValue *)valueWithCGSize:(CGSize)size;//保存CGSize结构体  
  7. + (NSValue *)valueWithCGRect:(CGRect)rect;//保存CGRect结构体  
  8. + (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;  
  9. + (NSValue *)valueWithUIEdgeInsets:(UIEdgeInsets)insets;  
  10.    
  11. - (void *)pointerValue;  
  12. - (CGPoint)CGPointValue;  
  13. - (CGSize)CGSizeValue;  
  14. - (CGRect)CGRectValue;  
  15. - (CGAffineTransform)CGAffineTransformValue;  
  16. - (UIEdgeInsets)UIEdgeInsetsValue;  
  17.    
  18. @end  
  19.     
  20. //  
  21. //  NSArrayAndSelectorViewController.m  
  22. //  NSArrayAndSelector  
  23. //  
  24. //  Created by Lixf on 09-10-15.  
  25. //  Copyright Lixf 2009. All rights reserved.  
  26. //  
  27.    
  28. #import "NSArrayAndSelectorViewController.h"  
  29.    
  30. @implementation NSArrayAndSelectorViewController  
  31. @synthesize SelectorArray, RectArray, TransformArray;  
  32.    
  33.    
  34. // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.  
  35. - (void)viewDidLoad {  
  36.     [super viewDidLoad];  
  37.    
  38.     //NSValue包装指针  
  39.     NSValue* start = [NSValue valueWithPointer:@selector(start:)];  
  40.     NSValue* help = [NSValue valueWithPointer:@selector(help:)];  
  41.    
  42.     //NSArray 添加NSValue包装后的指针  
  43.     NSArray *Array = [[NSArray alloc] initWithObjects:start, help, nil];  
  44.     self.SelectorArray = Array;  
  45.     [Array release];  
  46.    
  47.    
  48.     CGRect rect1 = {10, 10, 200, 200};  
  49.     CGRect rect2 = {20, 20, 100, 100};  
  50.    
  51.     //NSValue包装CGRect结构  
  52.     NSValue *aRect1 = [NSValue valueWithCGRect:rect1];  
  53.     NSValue *aRect2 = [NSValue valueWithCGRect:rect2];  
  54.     //NSArray 添加NSValue包装后的指针  
  55.     NSArray *reArray = [[NSArray alloc] initWithObjects:aRect1, aRect2, nil];  
  56.     self.RectArray = reArray;  
  57.     [reArray release];  
  58.    
  59.     //CGAffineTransform  
  60.     CGAffineTransform transform1 = CGAffineTransformMakeRotation(40);  
  61.     CGAffineTransform transform2 = CGAffineTransformMakeRotation(-40);  
  62.     NSValue *aTransform1 = [NSValue valueWithCGAffineTransform:transform1];  
  63.     NSValue *aTransform2 = [NSValue valueWithCGAffineTransform:transform2];  
  64.     NSArray *TransArray = [[NSArray alloc] initWithObjects:aTransform1, aTransform2, nil];  
  65.     self.TransformArray = TransArray;  
  66.     [TransArray release];  
  67.     [testView setFrame:[[RectArray objectAtIndex:0] CGRectValue]];  
  68.     [testView setTransform:[[TransformArray objectAtIndex:0] CGAffineTransformValue]];  
  69.     [self performSelector:[[SelectorArray objectAtIndex:0] pointerValue] withObject:nil afterDelay:0.5];      
  70. }  
  71.    
  72. -(void)start:(id)sender{  
  73.     NSLog(@"start");  
  74.     [testView setFrame:[[RectArray objectAtIndex:1] CGRectValue]];  
  75.     [testView setTransform:[[TransformArray objectAtIndex:1] CGAffineTransformValue]];  
  76.     [self performSelector:[[SelectorArray objectAtIndex:1] pointerValue] withObject:nil afterDelay:0.5];  
  77. }  
  78.    
  79. -(void)help:(id)sender{  
  80.     NSLog(@"help");  
  81.     //[testView setFrame:[[RectArray objectAtIndex:0] CGRectValue]];  
  82.     //[testView setTransform:[[TransformArray objectAtIndex:0] CGAffineTransformValue]];  
  83. }  
  84.    
分享到:
评论

相关推荐

    iOS 动画框架pop 1.0.7 framework最新直接用版本

    animation.toValue = NSValue(value: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)); [view.layer pop_addAnimation:animation forKey:@"move"]; ``` 4. **监听动画状态**:可以注册...

    cococa图表算法

    但可以通过 `NSValue` 对象来包装这些结构体,并进行存储和检索。 示例代码如下: ```c NSRect newRect = NSMakeRect(20, 20, 100, 100); NSValue *rectObject = [NSValue valueWithRect:newRect]; NSMutableArray...

    ios开发知识点

    - **NSValue**: 用于封装基本类型值,如指针或结构体。 **5. category、extension、protocol** - **category**: 一种扩展类的方法,可以在不修改原有类源码的情况下添加新的方法或属性。 - **extension**: 在Swift...

    iOS中的集合该如何弱引用对象示例详解

    本文将通过示例代码介绍如何使用 NSValue、NSPointerArray、NSMapTable、NSHashTable 等方法来弱引用对象。 一、使用 NSValue 弱引用对象 NSValue 可以弱引用保存一个对象,我们可以使用这种方法间接的引用。例如...

    DHScatterGraph:在iOS和OS X上查看散点图的类

    DHS散点图 用于在iOS和OS X上基于属性驱动的简单散点... 要绘制的数据以NSValue对象数组的NSValue提供, NSValue对象包装了包含要绘制的(x,y)坐标的CGPoint结构。 DHScatterGraphView *scatterGraph = [[DHScatterG

    IOS 开发总结

    - NSValue类:说明了如何使用NSValue类来表示其他值,如结构体或C语言数据类型。 - 判断对象等价性:介绍了如何判断两个对象是否相等。 - nil的操作:解释了在Objective-C中nil的特殊行为和用途。 2. iOS特定...

    ios kvo kvc 编程

    - 结构体需要通过`NSValue`包装。 - 数字类型的属性需要通过`NSNumber`包装。 - 开发者应该实现`setNilValueForKey:`方法来处理`nil`值的情况。 #### Key-Value Observing (KVO) KVO是一种允许对象观察其他对象...

    FrameWork +ios

    - **NSObject类**: `NSObject` 是所有 Objective-C 对象的基础类,定义了一些基本属性和方法,如内存管理相关的`retain`、`release`等方法。 - **NSAutoreleasePool**: `NSAutoreleasePool` 实现了自动释放池机制,...

    swift和OC混合编程实例源代码

    Swift对象可以通过`NSValue`包装成Objective-C对象,反之则可以使用`as?`或`as!`强制解包。 5. **协议和代理**:Objective-C中的代理模式可以无缝地与Swift配合使用。Swift可以遵循Objective-C协议,反之亦然。只需...

    弹出键盘,监听键盘高度

    - 在键盘通知的回调中,可以从`UIKeyboardFrameEndUserInfoKey`或`UIKeyboardFrameBeginUserInfoKey`键获取到一个`NSValue`对象,它包含了CGRect结构,包含了键盘的最终或初始frame。可以通过这个值来获取键盘的...

    IIAutoNSCoding:没有所有样板代码的情况下,使对象符合NSSecureCoding的要求。 对模型对象非常有用

    II自动NS编码 没有所有样板代码的情况下,使对象符合NSSecureCoding的要求。 您的对象可序列化,您不必编写繁琐且难以维护的编码/解码代码。...@property ( nonatomic , strong ) NSValue *aValue; @end @inter

    简单的3D动画效果

    它提供了对对象进行旋转、平移、缩放和倾斜等3D操作的能力。`CATransform3D`包含了16个浮点数,按照列优先的顺序排列,这16个值构成了4x4的矩阵,是3D图形学中常用的表示方式。 创建3D动画的第一步是设置视图的层...

    iOS 给已有类添加属性

    1. **定义属性**:首先,你需要确定要添加的属性类型,是对象属性(如NSString、NSArray等)还是基本数据类型(如int、float等)。对于对象属性,通常我们会声明一个ivar(实例变量)来存储值;对于基本类型,可以...

    UIKit 帮助文档

    NSValue用于存储基本数据类型,如浮点数、整数和指针等。UIKit Additions为NSValue提供了额外的方法,使其能够更好地与其他UI元素(如控件和视图)进行交互。 ##### 7. UIAcceleration 和 UIAccelerometer ...

    ios瀑布流布局文件

    在这个类中,开发者通常会重写父类的一些关键方法,如`- (NSArray<NSValue *> *)layoutAttributesForElementsInRect:(CGRect)rect`来获取指定矩形区域内需要布局的cell的属性,`- (UICollectionViewLayoutAttributes...

Global site tag (gtag.js) - Google Analytics