0

複数のUIImageをビューに追加できるアプリがあります。これらの画像は、画面上でドラッグできます。ドラッグされた画像を確認し、その画像の座標をファイルに保存し、同じビューに他のUIImageを保存しないようにするにはどうすればよいですか。可能であれば、各UIImageにタグを付けて、それらを分離し、それぞれを個別に識別する方法が必要です。うまくいけば、これは理にかなっています!

これが、各UIImageをビューに追加する方法です。

CGRect imageFrame = CGRectMake(activeView.center.x - 50, activeView.center.y - 50, 200, 200);
imageResizableView = [[SPUserResizableView alloc] initWithFrame:imageFrame];
UIImage *image = [UIImage imageNamed:@"galaxy.jpg"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageResizableView.contentView = imageView;
imageResizableView.delegate = self;
[activeView addSubview:imageResizableView];
4

3 に答える 3

2

UIVIewでタグ を使用できます。property

公式ドキュメントに記載されているように:

tagアプリケーションでビューオブジェクトを識別するために使用できる整数。

@property(nonatomic)NSIntegerタグ説明デフォルト値は0です。このタグの値を設定し、その値を使用して後でビューを識別することができます。

于 2012-08-26T13:29:24.030 に答える
1

UIImageViewsはUIViewサブクラスであるため、tagプロパティがあります。画像ごとに設定し、その1つの画像[self.subViews viewWithTag:number];で見つけたいときに設定します。

編集:私がこれを理解している場合、多くのUIImageViewがありますが、複数のimageViewが同じ画像を表示する場合があります。

それを想定して、タグの32ビットを分割して、一意のimageView番号として上位16ビット、下位16ビットを画像番号とします。次に、画像を探すためにすべてのサブビューを反復処理する必要があります。マクロを使用して、これを簡単にすることができます。

#define TAG_NUMBER(imageViewNum, imageNum) ((imageViewNum << 16) | imageNum)
#define IMAGE_FROM_TAG(tag) (tag & 0xFFFF)
etc

その画像を表示しているすべての画像ビューを検索する場合:

for(UIVIew *view in self.subviews) {
if(![view isKindOf:[UIIMageView class]]) continue;

int imageNum = IMAGE_FROM(view.tag);
if(imageNum == theOneIwant) {
  save frame of "view"
}
}
于 2012-08-26T13:29:44.567 に答える
1

整数タグで十分な場合はtag、UIViewにすでに存在するプロパティを使用します。

ただし、さらに何かが必要な場合は、を使用obj_setAssociatedObjectしてtagNameプロパティをUIViewに追加できます。

@interface UIView (tagName)
@property (nonatomic, copy) NSString *tagName;
@end

-

#import <objc/runtime.h>

@implementation UIView (tagName)
static char tagNameKey[1];

- (NSString*)tagName {
    return objc_getAssociatedObject(self, tagNameKey);
}

- (void)setTagName:(NSString *)tagName {
    objc_setAssociatedObject(self, tagNameKey, tagName, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
@end

その後、そのように使用することができます...

NSString *imageName = @"galaxy.jpg";
UIImage *image = [UIImage imageNamed:imageName];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.tagName = imageName;

以降...

NSString *imageName = imageView.tagName;

編集

もちろん、たとえば模倣するために、好きなものを追加できますviewWithTag

- (UIView*)viewWithTagName:(NSString *)tagName {
    if ([self.tagName isEqualToString:tagName]) {
        return self;
    }

    UIView *result = nil;
    for (UIView *view in self.subviews) {
        if ((result = [view viewWithTagName:tagName]) != nil) {
            return result;
        }
    }

    return nil;
}
于 2012-08-26T13:42:44.067 に答える