代码改变世界

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

2012-09-28 23:20  三戒1993  阅读(250)  评论(0编辑  收藏  举报

  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.