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

1 つの明白な可能性は、それrecognizer.view.scaleがゼロであるということです。それをテストしましたか?

handleTap:を呼び出す前に、このステートメントを に入れcreateShapeAt:ます。

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

そのステートメントの出力は何ですか?ゼロの場合、それはあなたの問題です。ゼロではないスケールを使用する必要があります。

于 2012-04-09T03:21:57.343 に答える