子类UIImageView用于在图像上存储额外数据

时间:2013-06-07 14:12:23

标签: iphone ios objective-c

我正在构建允许用户拖动UIImageView的app。如果将两个UIImageView拖动到相同的“段”,则拖动的第一个需要返回到它的起始位置。我将根据需要以编程方式创建UIImageView。

我是否应该将UIImageView子类化以创建一种存储UIImageView原始起始位置的方法,这样我可以在需要时将其返回到它的起始位置,还是有更好的方法来执行此操作?

2 个答案:

答案 0 :(得分:0)

我认为子类是一种很好的方法。

这样的事情应该可以胜任:

@interface ImageViewWithStartPosition : UIImageView

@property (nonatomic) CGPoint startPosition;

- (void)returnToStartPosition;

@end

您还可以创建一个类别add a property to it using the runtime,但如果子类化是一个选项,我建议不要使用它。

答案 1 :(得分:0)

如果您希望在UIViewController中保留此类信息,则解决方案可能是NSMutableDictionary开始协调。

您可以使用从图像视图的哈希创建的密钥将CGPoint封装到NSValue中保存。

这样的事情:

//  Save origin of image view to NSMutableDictionary with key created from UIImageView's hash
CGPoint point = imageView.frame.origin;
[mutableDictionary setObject:[NSValue valueWithCGPoint:point] forKey:@([imageView hash])];


//  Retrieve previous coordinations of image view from NSMutableDictionary by UIImageView's hash
NSValue *originalCoordsValue = [mutableDictionary objectForKey:@([imageView hash])];

if(originalCoordsValue) {
    //  I have previous origin of the image view
    CGPoint originalPoint = [originalCoordsValue CGPointValue];
    //  Do whatever you want with previous coordinations
    NSLog(@"Original point: %@", NSStringFromCGPoint(originalPoint));
}

最好的解决方案通常是意见问题,所以我不是说这是最好的解决方案。决定自己: - )