This is a follow up question on my first queries regarding retrieving data on plist. Right now i have开发者_如何学编程 manage to detect users touches made on my view with random image call out (thanks to phytonquick).
CGPoint currentTouchLocation = [currentTouch locationInView:self];
Im having trouble now on how to compare the value i got from the users touches made on the random image in the view to the one save inside the plist data with the same name as the random image the users touches. I know how to calculate the touch distance so i could adjust the hit points.
-(CGFloat) distanceBetween: (CGPoint) point1 and: (CGPoint)point2
NSMutableDictionary *????? = [self loadDictionaryFromPList: @"?????"];
NSNumber *1stXCoordinate = [????? objectForKey:@"1stXCoordinate"];
NSNumber *1stYCoordinate = [????? objectForKey:@"1stYCoordinate"];
if (1stXCoordinate && 1stYCoordinate)
{
CGPoint 1stTouchLocation = CGPointMake([lastXCoordinate floatValue], [lastYCoordinate floatValue]);
CGFloat distanceBetweenTouches = [self distanceBetween: currentTouchLocation and: 1stTouchLocation];
if (distanceBetweenTouches < 20)
{
// do something here
NSLog(@"You hit it.");
}
}
Also I dont know on how should i construct my plist data. I've read several books with sample of it (like the "iphone 3 dev") but i cant figure it out specially when most of the samples i saw are for tableview purposes. This is how i layout my plist:
randImage <-- callout array
p1.jpg <-- image represented by array
tap1 <-- Array
item 1 - x1 coordinate <-- Number
item 2 - y1 coordinate <-- Number
item 3 - x2 coordinate <-- Number
item 4 - y2 coordinate <-- Number
item 5 - x3 coordinate <-- Number
item 6 - y3 coordinate <-- Number
tap2 <-- Array
item 1 - x1 coordinate <-- Number
item 2 - y1 coordinate <-- Number
item 3 - x2 coordinate <-- Number
item 4 - y2 coordinate <-- Number
p2.jpg <-- image represented by array
tap1
item 1....etc
Could someone please direct me to the right path on how should i do this. Thank you.
Here are two methods to read and write values from a plist using an NSDictionary:
- (NSMutableDictionary*)dictionaryFromPlist {
NSString *filePath = @"myPlist.plist";
NSMutableDictionary* propertyListValues = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
return [propertyListValues autorelease];
}
- (BOOL)writeDictionaryToPlist:(NSDictionary*)plistDict{
NSString *filePath = @"myPlist.plist";
BOOL result = [plistDict writeToFile:filePath atomically:YES];
return result;
}
and then in your code block somewhere:
// Read key from plist dictionary
NSDictionary *dict = [self dictionaryFromPlist];
NSString *valueToPrint = [dict objectForKey:@"Executable file"];
NSLog(@"valueToPrint: %@", valueToPrint);
// Write key to plist dictionary
NSString *key = @"Icon File";
NSString *value = @"appIcon.png";
[dict setValue:value forKey:key];
// Write new plist to file using dictionary
[self writeDictionaryToPlist:dict];
Try this:
-(void)add:(NSRunningApplication *) app {
if ([self contains:app]) return;
[self.apps addObject:app.localizedName];
[self.apps writeToFile:self.dataFile atomically:YES];
}
Look into the documentation for -initWithContentsOfFile:
You should be able to create dictionaries and arrays from plists, provided that they are standard.
In this case, you can call [[NSDictionary alloc] initWithContentsOfFile:@"path/to/plist"];
And then you can use -valueForKey:
to get the data you need.
The plist part is well explained in other answers.
But if you are storing/reading with CGPoint
I would strongly suggest you to use the following very handy methods, CGPointFromString
and NSStringFromCGPoint
see Apple documentation for more information.
Note there are also other utilities to work with graphics structures like CGPointEqualToPoint
, CGRectContainsPoint
, CGRectIntersectsRect
or CGRectContainsRect
... see Apple documentation for more information
精彩评论