2012-04-03 189 views
0

与我最近的大部分问题一样,我认为这是一个语法问题。我知道我想要做什么,但我不知道如何写它。我正在尝试创建一个拼图类型的应用程序。 CGPoints代表每个图像应该在哪里的中心点。无法声明/初始化CGPoint数组

  1. 我创建了40个图像并将它们放入一个数组中。
  2. 我想创建40个CGPoints并将所有这些点放在一个数组中。
  3. 图像[0]上的图像在cgpoints [0]处具有相应的中心 - 或者更确切地说,图像应放置在拼图中。

虽然我很难声明/初始化CGPoint数组。下面是代码:

.h文件中

#import <UIKit/UIKit.h> 

@interface DSAAssignmentViewController2 : UIViewController 

@property (weak, nonatomic) NSString *passedData; 
@property (weak, nonatomic) IBOutlet UILabel *lblDisplayPreviousInput; 
@property (weak, nonatomic) IBOutlet UIImageView *imgOriginal; 
@property (weak, nonatomic) IBOutlet UIImageView *img1; 
@property (weak, nonatomic) IBOutlet UIImageView *img2; 
@property (weak, nonatomic) IBOutlet UIImageView *img3; 
@property (weak, nonatomic) IBOutlet UIImageView *img4; 
@property (weak, nonatomic) IBOutlet UIImageView *img5; 
@property (weak, nonatomic) IBOutlet UIImageView *img6; 
@property (weak, nonatomic) IBOutlet UIImageView *img7; 
@property (weak, nonatomic) IBOutlet UIImageView *img8; 
@property (weak, nonatomic) IBOutlet UIImageView *img9; 
@property (weak, nonatomic) IBOutlet UIImageView *img10; 
@property (weak, nonatomic) IBOutlet UIImageView *img11; 
@property (weak, nonatomic) IBOutlet UIImageView *img12; 
@property (weak, nonatomic) IBOutlet UIImageView *img13; 
@property (weak, nonatomic) IBOutlet UIImageView *img14; 
@property (weak, nonatomic) IBOutlet UIImageView *img15; 
@property (weak, nonatomic) IBOutlet UIImageView *img16; 
@property (weak, nonatomic) IBOutlet UIImageView *img17; 
@property (weak, nonatomic) IBOutlet UIImageView *img18; 
@property (weak, nonatomic) IBOutlet UIImageView *img19; 
@property (weak, nonatomic) IBOutlet UIImageView *img20; 
@property (weak, nonatomic) IBOutlet UIImageView *img21; 
@property (weak, nonatomic) IBOutlet UIImageView *img22; 
@property (weak, nonatomic) IBOutlet UIImageView *img23; 
@property (weak, nonatomic) IBOutlet UIImageView *img24; 
@property (weak, nonatomic) IBOutlet UIImageView *img25; 
@property (weak, nonatomic) IBOutlet UIImageView *img26; 
@property (weak, nonatomic) IBOutlet UIImageView *img27; 
@property (weak, nonatomic) IBOutlet UIImageView *img28; 
@property (weak, nonatomic) IBOutlet UIImageView *img29; 
@property (weak, nonatomic) IBOutlet UIImageView *img30; 
@property (weak, nonatomic) IBOutlet UIImageView *img31; 
@property (weak, nonatomic) IBOutlet UIImageView *img32; 
@property (weak, nonatomic) IBOutlet UIImageView *img33; 
@property (weak, nonatomic) IBOutlet UIImageView *img34; 
@property (weak, nonatomic) IBOutlet UIImageView *img35; 
@property (weak, nonatomic) IBOutlet UIImageView *img36; 
@property (weak, nonatomic) IBOutlet UIImageView *img37; 
@property (weak, nonatomic) IBOutlet UIImageView *img38; 
@property (weak, nonatomic) IBOutlet UIImageView *img39; 
@property (weak, nonatomic) IBOutlet UIImageView *img40; 
@property (strong, nonatomic) NSArray *imageViews; 

@property CGPoint *holder1; 
@property CGPoint *holder2; 
@property CGPoint *holder3; 
@property CGPoint *holder4; 
@property CGPoint *holder5; 
@property CGPoint *holder6; 
@property CGPoint *holder7; 
@property CGPoint *holder8; 
@property (strong, nonatomic) NSMutableArray *holders; 

@end 

.m文件

#import "DSAAssignmentViewController2.h" 

@interface DSAAssignmentViewController2() 

@end 

@implementation DSAAssignmentViewController2 
@synthesize lblDisplayPreviousInput; 
@synthesize imgOriginal; 
@synthesize img1; 
@synthesize img2; 
@synthesize img3; 
@synthesize img4; 
@synthesize img5; 
@synthesize img6; 
@synthesize img7; 
@synthesize img8; 
@synthesize img9; 
@synthesize img10; 
@synthesize img11; 
@synthesize img12; 
@synthesize img13; 
@synthesize img14; 
@synthesize img15; 
@synthesize img16; 
@synthesize img17; 
@synthesize img18; 
@synthesize img19; 
@synthesize img20; 
@synthesize img21; 
@synthesize img22; 
@synthesize img23; 
@synthesize img24; 
@synthesize img25; 
@synthesize img26; 
@synthesize img27; 
@synthesize img28; 
@synthesize img29; 
@synthesize img30; 
@synthesize img31; 
@synthesize img32; 
@synthesize img33; 
@synthesize img34; 
@synthesize img35; 
@synthesize img36; 
@synthesize img37; 
@synthesize img38; 
@synthesize img39; 
@synthesize img40; 
@synthesize passedData; 
@synthesize imageViews; 

@synthesize holder1; 
@synthesize holder2; 
@synthesize holder3; 
@synthesize holder4; 
@synthesize holder5; 
@synthesize holder6; 
@synthesize holder7; 
@synthesize holder8; 
@synthesize holders; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    // make jigsaw piece holders 
    //create 8 points where the jigsaw pieces (images) will be placed 
    CGPoint holder1 = CGPointMake(60, 644); 
    CGPoint holder2 = CGPointMake(140, 644); 
    CGPoint holder3 = CGPointMake(220, 644); 
    CGPoint holder4 = CGPointMake(300, 644); 
    CGPoint holder5 = CGPointMake(380, 644); 
    CGPoint holder6 = CGPointMake(460, 644); 
    CGPoint holder7 = CGPointMake(540, 644); 
    CGPoint holder8 = CGPointMake(620, 644); 

    // set up array of cgpoints 
    holders = [NSMutableArray arrayWithObjects:[NSValue valueWithCGPoint: holder1],[NSValue valueWithCGPoint: holder2], [NSValue valueWithCGPoint: holder3], [NSValue valueWithCGPoint: holder4], [NSValue valueWithCGPoint: holder5], [NSValue valueWithCGPoint: holder6], [NSValue valueWithCGPoint: holder7], [NSValue valueWithCGPoint: holder8], nil]; 

    // set up array of images 
    imageViews = [NSArray arrayWithObjects:img1, img2, img3, img4, img5, img6, img7, img8, img9, img10, img11, img12, img13, img14, img15, img16, img17, img18, img19, img20, img21, img22, img23, img24, img25, img26, img27, img28, img29, img30, img31, img32, img33, img34, img35, img36, img37, img38, img39, img40, nil]; 

    NSString *welcomeMessage = [NSString stringWithFormat:@"Welcome %@", passedData]; 
    UIAlertView *alert = [[UIAlertView alloc] //show alert box with option to play or exit 
          initWithTitle: welcomeMessage 
          message:@"Once you press \"Play\" the timer will start. Good luck!" 
          delegate:self 
          cancelButtonTitle:@"I want out!" 
          otherButtonTitles:@"Play",nil]; 
    [alert show]; 
    NSLog(@"x-coord: %f, y-coord: %f", holder1.x, holder1.y); 
} 

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
     UITouch *touch = [touches anyObject]; 
    //location of current touch 
    CGPoint location = [touch locationInView:self.view]; 
    UIView *touchedView = [touch view]; 
    if ([imageViews indexOfObject:touchedView] != NSNotFound) { 
     // not not found means found! 
     [self animateFirstTouch:touchedView withLocation:location]; 
    } else { 
     return; 
    } 

} 

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self touchesBegan:touches withEvent:event]; 
} 


-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    //location of current touch 
    CGPoint location = [touch locationInView:self.view]; 
    UIView *touchedView = [touch view]; 
    [self animateReleaseTouch:touchedView withLocation:location]; 

} 



- (void)viewDidUnload 
{ 
    [self setLblDisplayPreviousInput:nil]; 
    [self setImgOriginal:nil]; 
    [self setImg1:nil]; 
    [self setImg2:nil]; 
    [self setImg3:nil]; 
    [self setImg4:nil]; 
    [self setImg5:nil]; 
    [self setImg6:nil]; 
    [self setImg7:nil]; 
    [self setImg8:nil]; 
    [self setImg9:nil]; 
    [self setImg10:nil]; 
    [self setImg11:nil]; 
    [self setImg12:nil]; 
    [self setImg13:nil]; 
    [self setImg14:nil]; 
    [self setImg15:nil]; 
    [self setImg16:nil]; 
    [self setImg17:nil]; 
    [self setImg18:nil]; 
    [self setImg19:nil]; 
    [self setImg20:nil]; 
    [self setImg21:nil]; 
    [self setImg22:nil]; 
    [self setImg23:nil]; 
    [self setImg24:nil]; 
    [self setImg25:nil]; 
    [self setImg26:nil]; 
    [self setImg27:nil]; 
    [self setImg28:nil]; 
    [self setImg29:nil]; 
    [self setImg30:nil]; 
    [self setImg31:nil]; 
    [self setImg32:nil]; 
    [self setImg33:nil]; 
    [self setImg34:nil]; 
    [self setImg35:nil]; 
    [self setImg36:nil]; 
    [self setImg37:nil]; 
    [self setImg38:nil]; 
    [self setImg39:nil]; 
    [self setImg40:nil]; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 

-(void) animateFirstTouch:(UIImageView *)image withLocation:(CGPoint)location { 
    image.center = location; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.2]; 
    image.transform = CGAffineTransformMakeScale(1.25, 1.25); 
    [UIView commitAnimations]; 
} 

-(void) animateReleaseTouch:(UIImageView *)image withLocation:(CGPoint)location { 
    image.center = location; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.2]; 
    image.transform = CGAffineTransformMakeScale(1.0, 1.0); 
    [UIView commitAnimations]; 
} 



- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

@end 

如果一切有点乱与否我不能告诉。正如你所看到的,我已经开始只有8个“持有者”,这些CGPoint代表了拼图碎片应该放置在哪里的中心。

+3

这不仅仅是一团糟。当你可以以编程方式生成它们并将它们保存在一个数组中时,从来没有好的理由可以拥有40个属性。也就是说,你应该发布你遇到的具体错误;只是说“不起作用”对试图诊断问题的人没有帮助。 – 2012-04-03 14:17:42

+0

@IanHenry击败我。这里的实际问题或问题是什么?如果你正在寻找代码审查,那么[Code Review StackExchange](http://codereview.stackexchange.com/)。 – 2012-04-03 14:19:35

+0

对不起,我意识到我不清楚。我的问题是CG可变数组。我现在的方式是,我得到的错误指出:“holder1,2,3,... 8的本地声明隐藏实例变量”。这是在我的.m文件中。对于Obj-C,我是一个新手,我不确定我是否将正确的东西放在.h和.m文件中。 – garethdn 2012-04-03 14:27:23

回答

2

borrrden是正确的。通过将它们声明为属性并合成它们,您已经创建了一大堆CGPoint指针变量。但是,在你的-viewDidLoad方法中,你声明CGPoint结构体 - 而不是CGPoint指针 - 所有这些都与你合成的属性名称相同。

根本不需要holderN属性来判断代码。事实上,你甚至不需要-viewDidLoad方法中的holderN变量。你可以很容易地摆脱这样的:

- (void)viewDidLoad 
{ 
    holders = [ NSMutableArray arrayWithObjects: 
           [ NSValue valueWithCGPoint: CGPointMake(60, 644) ], 
           ..., 
           [ NSValue valueWithCGPoint: CGPointMake(N, N) ], 
           nil ]; 
    ... 
} 

硬编码的点的坐标是设计较差,虽然。你最好的选择是把坐标放在plist中,你可以根据需要将它们加载到数组中。这意味着调整坐标只是编辑plist的问题。不需要重新编译。

-2

NSPoint是不是一个对象,所以你必须要么用C数组:NSPoint points[SIZE]或使用NSValue容器:[NSValue valueWithCGPoint: point]

+1

我想你错过了他正在做的那部分... – borrrden 2012-04-03 14:30:30

+0

嗨,我实际上使用过[[NSValue valueWithCGPoint:point]'。我收到的错误是我上面评论中提到的错误。 – garethdn 2012-04-03 14:30:55

1

你所得到的消息,在您的评论,因为你声明的同名变量在你的属性viewDidLoad开始。

+0

我试图用'holder1,2,...,8'的值填充'NSMutableArray *持有者'。我认为这是一种做法。我不知道如何去做。 – garethdn 2012-04-03 14:59:28

+0

你的意思是你的意图是设置你的属性? – borrrden 2012-04-03 15:00:44