当试图将 CGPoint 传递给方法时,该点被传递,但是一旦在被调用的方法中,CGPoint 值就会显示(inf,inf)?因此,将位置 CGPoint 传递给 createShapeAt 方法会导致代码无法正常工作。也许我没有正确实现某些东西,或者我是否需要在传递时复制 CGPoint?
- (void)handleTap:(UITapGestureRecognizer *)recognizer {
if ([recognizer isKindOfClass:[UITapGestureRecognizer class]])
{
NSLog(@"User just tapped!");
CGPoint location = [recognizer locationInView:recognizer.view];
float scale = [(BasicCanvasUIView *)recognizer.view scale];
location = CGPointMake(location.x / scale, location.y / scale);
[self createShapeAt:location];
}
}
- (void)createShapeAt:(CGPoint)point {
//Create a managed object to store the shape
----------------------------------------------------------------------------
<-- WHEN I GET HERE ON BREAKPOINT THE (point) VARIABLE SHOWS "(inf,inf)" -->
----------------------------------------------------------------------------
NSManagedObject *shape = nil;
//Randomly choose a Circle or a Polygon
int type = arc4random() % 2;
if (type == 0) { // Circle
//Create the circle
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Circle" inManagedObjectContext:self.managedObjectContext];
NSManagedObject *circle = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:self.managedObjectContext];
shape = circle;
//Randomly create a radius and set the attributes of the circle
float radius = 10 + (arc4random() % 90);
[circle setValue:[NSNumber numberWithFloat:point.x] forKey:@"x"];
[circle setValue:[NSNumber numberWithFloat:point.y] forKey:@"y"];
[circle setValue:[NSNumber numberWithFloat:radius] forKey:@"radius"];
} else { // Polygon
//Create the Polygon
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Polygon" inManagedObjectContext:self.managedObjectContext];
NSManagedObject *polygon = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:self.managedObjectContext];
shape = polygon;
//Get the vertices. At this point, no Vertex objects for this shape exist.
//Anything you add to the set, however, will be added to the Vertex entity;
NSMutableSet *vertices =[polygon mutableSetValueForKey:@"vertices"];
//Create a random number of vertices
int nVertices = 3 + (arc4random() % 20);
float angleIncrement = (2 * M_PI) / nVertices;
int index = 0;
for (float i = 0; i < nVertices; i++) {
// Generate random values of each vertex
float a = i * angleIncrement;
float radius = 10 + (arc4random() % 90);
float x = point.x + (radius * cos(a));
float y = point.y + (radius * sin(a));
// Create the Vertex managed object
NSEntityDescription *vertexEntity = [NSEntityDescription entityForName:@"Vertex" inManagedObjectContext:self.managedObjectContext];
NSManagedObject *vertex = [NSEntityDescription insertNewObjectForEntityForName:[vertexEntity name] inManagedObjectContext:self.managedObjectContext];
//Set teh values for the vertex
[vertex setValue:[NSNumber numberWithFloat:x] forKey:@"x"];
[vertex setValue:[NSNumber numberWithFloat:y] forKey:@"y"];
[vertex setValue:[NSNumber numberWithFloat:index++] forKey:@"index"];
//Add the Vertex object to the relationship
[vertices addObject:vertex];
}// ----------------- END IF/ELSE (circle and polygon done) -------------------------------------------------------------------------------------
//Set the shapes color
[shape setValue:[self makeRandomColor] forKey:@"color"];
//Add the same shape to both canvases
[[topView.canvas mutableSetValueForKey:@"shapes"] addObject:shape];
[[bottomView.canvas mutableSetValueForKey:@"shapes"] addObject:shape];
//Save the context
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
// Tell the views to repaint themselves
[topView setNeedsDisplay];
[bottomView setNeedsDisplay];
}
}