1

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

我应该继承 UIImageView 以创建一种方法来存储 UIImageView 的原始起始位置,以便在需要时将其返回到起始位置,还是有更好的方法来做到这一点?

4

2 回答 2

0

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

像这样的东西应该可以完成这项工作:

@interface ImageViewWithStartPosition : UIImageView

@property (nonatomic) CGPoint startPosition;

- (void)returnToStartPosition;

@end

您还可以使用 runtime创建一个类别并为其添加一个属性,但如果可以选择子类化,我建议您不要这样做。

于 2013-06-07T14:21:49.090 回答
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));
}

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

于 2013-06-07T14:39:26.147 回答