我正在构建允许用户拖动 UIImageView 的应用程序。如果将两个 UIImageView 拖到同一个“段”,则拖到那里的第一个需要返回到它的起始位置。我将根据需要以编程方式创建 UIImageView。
我应该继承 UIImageView 以创建一种方法来存储 UIImageView 的原始起始位置,以便在需要时将其返回到起始位置,还是有更好的方法来做到这一点?
我正在构建允许用户拖动 UIImageView 的应用程序。如果将两个 UIImageView 拖到同一个“段”,则拖到那里的第一个需要返回到它的起始位置。我将根据需要以编程方式创建 UIImageView。
我应该继承 UIImageView 以创建一种方法来存储 UIImageView 的原始起始位置,以便在需要时将其返回到起始位置,还是有更好的方法来做到这一点?
我认为子类是一个很好的方法。
像这样的东西应该可以完成这项工作:
@interface ImageViewWithStartPosition : UIImageView
@property (nonatomic) CGPoint startPosition;
- (void)returnToStartPosition;
@end
您还可以使用 runtime创建一个类别并为其添加一个属性,但如果可以选择子类化,我建议您不要这样做。
例如,如果您想保留此类信息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));
}
最好的解决方案通常是见仁见智的问题,所以我并不是说这是最好的。自己决定:-)