0

当试图将 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];

 }
}
4

1 回答 1

5

一种明显的可能性是recognizer.view.scale零。你测试过吗?

handleTap:在您致电之前,请将此声明放入createShapeAt:

NSLog(@"recognizer.view.scale = %f", scale);

该语句的输出是什么?如果它是零,那是你的问题。您需要使用不为零的比例。

于 2012-04-09T03:21:57.343 回答