0

私のビューには、さまざまなポイントの配列がある配列があり、その配列をループに通して、ビューにさまざまな正方形の束を作成します。また、アクセシビリティ識別子を使用してシステムのようなIDを作成しようとしたこともわかります。それはおそらく本当に悪い習慣ですが、私はアイデアを使い果たしました。ビューは次のとおりです。

#import "LevelOneView.h"


@implementation LevelOneView
@synthesize squareLocations;




- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}


- (void)drawRect:(CGRect)rect
{

    squareLocations = [[NSMutableArray alloc] init];

    CGPoint dotOne = CGPointMake(1, 25);
    [squareLocations addObject:[NSValue valueWithCGPoint:dotOne]];

    CGPoint dotTwo = CGPointMake(23, 25);
    [squareLocations addObject:[NSValue valueWithCGPoint:dotTwo]];

    CGPoint dotThree = CGPointMake(45, 25);
    [squareLocations addObject:[NSValue valueWithCGPoint:dotThree]];

    CGPoint dotFour = CGPointMake(67, 25);
    [squareLocations addObject:[NSValue valueWithCGPoint:dotFour]];

    CGPoint dotFive = CGPointMake(89, 25);
    [squareLocations addObject:[NSValue valueWithCGPoint:dotFive]];

    CGPoint dotSix = CGPointMake(111, 25);
    [squareLocations addObject:[NSValue valueWithCGPoint:dotSix]];

    CGPoint dotSeven = CGPointMake(133, 25);
    [squareLocations addObject:[NSValue valueWithCGPoint:dotSeven]];

    CGPoint dotEight = CGPointMake(155, 25);
    [squareLocations addObject:[NSValue valueWithCGPoint:dotEight]];

    CGPoint dotNine = CGPointMake(177, 25);
    [squareLocations addObject:[NSValue valueWithCGPoint:dotNine]];

    CGPoint dotTen = CGPointMake(199, 25);
    [squareLocations addObject:[NSValue valueWithCGPoint:dotTen]];

    int numby = [squareLocations count];

    for (int i = 0; i < numby; i++)
    {
        NSValue *pointLocation = [squareLocations objectAtIndex:i];
        CGPoint tmpPoint = [pointLocation CGPointValue];

        UIImage *theSquare = [UIImage imageNamed:@"square.png"];

        NSString *myID = [NSString stringWithFormat:@"%d", i];
        [theSquare setAccessibilityLabel:myID];
        [theSquare drawInRect:CGRectMake(tmpPoint.x, tmpPoint.y, theSquare.size.width, theSquare.size.height)];

    }

}


@end

だから、私の目標は、どの正方形がスライドしたときにどの正方形がスライドしたかを知ることができるようにすることです!だから私はシステムのようなIDを探しています。それは、オブジェクトの「ID」上で現在スライドされているものをチェックし、そこからそれをどうするかを決めることができます。ビューのコントローラーでそのようなものを書き込もうとしました。

#import "LevelOneController.h"

@interface LevelOneController ()

@end

@implementation LevelOneController
@synthesize whereStuffActuallyHappens;

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"View loaded");
}


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

    for (UIView *view in self.view.subviews)
    {

        if ([touch.accessibilityLabel isEqual: @"1"] && CGRectContainsPoint(view.frame, touchLocation))
        {

            [view removeFromSuperview];
        }

    }

}




- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end

もう一度、この場合、アクセシビリティラベルを使用しようとしているのを見ることができます...ハハ。誰かがこれを達成する方法を知っていますか?個々の正方形にIDを付けて、その正方形がスライドしたときにそのIDを確認する方法はありますか?ありがとう!

4

2 に答える 2

0

Rakesh のコメントは間違いなく正しいので、UIImageViewできれば使用してください。

サブビューとして追加していないため、正方形もtouchesMoved検出されません。ビューに描画された画像にすぎません。これは、むしろ uiimageviews を使用する必要があるもう 1 つの理由です。

これを(はるかに難しい)方法で行うことを主張している場合:IDをキーとしてNSDictionaryを保持し、正方形のフレームをオブジェクトとしてcgrectすることをお勧めします。そして、タッチするたびに、可能なすべてのキーを繰り返し処理CGRectContainsPointし、オブジェクトを呼び出します。rect 内にポイントが含まれている場合は、関連付けられた ID (キー) を返します。しかし、そうすることはお勧めしません。

于 2013-03-15T19:34:35.250 に答える
0

UIImageViewの代わりに画像を画面に表示するためにをdrawRect:使用しtag、その画像ビューの を使用して、それがどのビューであるかを識別することができます。

このtagプロパティは、すべての UIView とそのサブクラスで使用できます。(UIButton、UIImageViewなど)

あなたのアプローチからUIImagedrawRect:. すべての画像が 1 つのビューに描画されます。そのため、画像を識別できないことに加えて、スーパービューから削除すると、期待どおりに機能しません。を使用するUIImageViewと、多くの問題が解決すると思います。

于 2013-03-15T18:19:21.843 に答える