我有一个应用程序,可以在视图中添加多个UIImages。然后可以在屏幕上拖动这些图像。如何检查已拖动的图像,然后将 图像的坐标保存到文件中,而不是同一视图中的其他UII图像。我需要一种标记每个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];
答案 0 :(得分:2)
您可以在UIVIew上使用标记 property
。
正如官方doc中提到的那样:
标记可用于标识应用程序中视图对象的整数。
@property(非原子)NSInteger标记讨论默认值为0.您可以设置此标记的值,并稍后使用该值来标识视图。
答案 1 :(得分:1)
UIImageView
是UIView的子类,因此具有tag
属性。为每个图像设置该图像,然后当您希望该图像[self.subViews viewWithTag:number];
找到它时。
假设您将标记的32位分区为16位作为唯一的imageView编号,而较低的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"
}
}
答案 2 :(得分:1)
如果整数标记足够好,那么使用UIViews已经存在的tag
属性。
但是,如果您想要更多内容,可以使用obj_setAssociatedObject
向UIView添加tagName属性。
@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;
}