Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 子类UIImageView在图像上存储额外数据_Iphone_Ios_Objective C - Fatal编程技术网

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

Iphone 子类UIImageView在图像上存储额外数据,iphone,ios,objective-c,Iphone,Ios,Objective C,我正在构建一个允许用户拖动UIImageView的应用程序。如果将两个UIImageView拖动到同一个“段”,则需要将拖动到该段的第一个UIImageView返回到其起始位置。我将按需编程创建UIImageView 我应该将UIImageView子类化以创建一种存储UIImageView原始起始位置的方法,以便在需要时将其返回到起始位置,还是有更好的方法来实现这一点?我认为子类是一种好方法 像这样的东西应该可以完成这项工作: @interface ImageViewWithStartPosit

我正在构建一个允许用户拖动UIImageView的应用程序。如果将两个UIImageView拖动到同一个“段”,则需要将拖动到该段的第一个UIImageView返回到其起始位置。我将按需编程创建UIImageView


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

我认为子类是一种好方法

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

@interface ImageViewWithStartPosition : UIImageView

@property (nonatomic) CGPoint startPosition;

- (void)returnToStartPosition;

@end

您还可以创建一个类别和,但如果子类化是一个选项,我建议您不要这样做。

例如,如果您想在UIViewController中保留此类信息,解决方案可以是启动协调的NSMutableDictionary

您可以使用从图像视图的散列创建的密钥保存封装到NSValue中的起始CGPoint

大概是这样的:

//  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));
}
最好的解决方案往往是意见的问题,所以我不是说这是最好的。你自己决定:-