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) を使用しているときは、ビューであるオブジェクトを使用しています。目に見えるもの (形、画像、その他の種類の視覚要素など) は、実際には目に見えない小さな窓の中にあります。

したがって、キャンバスに何かを追加すると、実際にはキャンバスにビューが追加されます。キャンバス自体もビューです。

ビューを相互に追加すると、アプリは「階層」を作成するため、キャンバスにシェイプを追加すると、キャンバスがシェイプの スーパービューになり、シェイプがキャンバスの サブビューになります。

さて、あなたの質問に答えるために(私はあなたのコードを修正しました):

#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 に答える