1

我正在尝试删除一个对象实例,但不太确定如何在 Objective C 中执行此操作?

我想摆脱我在屏幕上创建的那个椭圆

#import "C4WorkSpace.h"
#import <UIKit/UIKit.h>

C4Shape * myshape; // [term] declaration
C4Shape * secondshape;
CGRect myrect; // core graphics rectangle declaration

int x_point; // integer (whole)
int y_point;

@implementation C4WorkSpace

-(void)setup
{
    // created a core graphics rectangle
    myrect = CGRectMake(0, 0, 100, 100);
    // [term] definition (when you allocate, make, or instantiate)
    myshape = [C4Shape ellipse:myrect];

    // preview of week 3
    [myshape addGesture:PAN name:@"pan" action:@"move:"];
    //Display the Shape
    [self.canvas addShape:myshape];
}

-(void)touchesBegan {
}

@end 

我对Objective-C真的很陌生,请用简单的语言解释一下。

4

1 回答 1

2

当您使用 C4(或 iOS / Objective-C)时,您正在使用的对象是views。你看到的东西(如形状、图像或任何其他类型的视觉元素)实际上位于无形的小窗户内。

因此,当您向画布添加内容时,您实际上是在向画布添加视图。画布本身也是一个视图。

当相互添加视图时,应用程序会创建一个“层次结构”,因此如果您将形状添加到画布,画布将成为该形状的 超级视图,而该形状将成为画布的 子视图

现在,回答你的问题(我修改了你的代码):

#import "C4WorkSpace.h"

@implementation C4WorkSpace {
    C4Shape * myshape; // [term] declaration
    CGRect myrect; // core graphics rectangle declaration
}

-(void)setup {
    myrect = CGRectMake(0, 0, 100, 100);
    myshape = [C4Shape ellipse:myrect];
    [myshape addGesture:PAN name:@"pan" action:@"move:"];
    [self.canvas addShape:myshape];
}

-(void)touchesBegan {
    //check to see if the shape is already in another view
    if (myshape.superview == nil) {
        //if not, add it to the canvas
        [self.canvas addShape:myshape];
    } else {
        //otherwise remove it from the canvas
        [myshape removeFromSuperview];
    }
}
@end

我更改了 touchesBegan 方法以从画布中添加/删除形状。该方法的工作原理如下:

  1. 它首先检查形状是否有超级视图
  2. 如果没有,这意味着它不在画布上,所以它添加它
  3. 如果确实有,它会通过调用将其删除[shape removeFromSuperview];

当您运行该示例时,您会注意到您可以在画布上打开和关闭它。您可以这样做,因为形状本身就是一个对象,并且您已经在内存中创建了它并保留了它。

如果您想完全破坏形状对象,可以将其从画布中移除,然后调用shape = nil;

于 2013-09-14T19:41:45.557 回答