我正在构建允许用户拖动UIImageView的app。如果将两个UIImageView拖动到相同的“段”,则拖动的第一个需要返回到它的起始位置。我将根据需要以编程方式创建UIImageView。
我是否应该将UIImageView子类化以创建一种存储UIImageView原始起始位置的方法,这样我可以在需要时将其返回到它的起始位置,还是有更好的方法来执行此操作?
答案 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));
}
最好的解决方案通常是意见问题,所以我不是说这是最好的解决方案。决定自己: - )