无法声明/初始化CGPoints数组

时间:2012-04-03 14:08:28

标签: objective-c ios nsmutablearray cgpoint

与我最近的大多数问题一样,我认为这是一个语法问题。我知道我想做什么,但我不知道如何写它。我正在尝试创建一个Jigsaw类型的应用程序。 CGPoints表示每个图像应该在哪里的中心点。

  1. 我创建了40张图片并将它们放入数组中。
  2. 我想创建40个CGPoints并将所有这些点放在一个数组中。
  3. 图像[0]处的图像在cgpoints [0]处具有相应的中心 - 或者更确切地说,这是图像应放置在拼图中的位置。
  4. 我无法声明/初始化CGPoints数组。以下是代码:

    .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个“持有者”开始,这些是代表拼图碎片放置位置中心的CGPoints。

3 个答案:

答案 0 :(得分: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的问题。无需重新编译。

答案 1 :(得分:1)

您在评论中收到消息,因为您在viewDidLoad的开头声明了与您的属性同名的变量。

答案 2 :(得分:-2)

NSPoint不是对象,因此您必须使用C数组:NSPoint points[SIZE]或使用NSValue容器:[NSValue valueWithCGPoint: point]