2012-04-03 90 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