UIImageView's
UIImage
に現在格納されている の名前を読み取ることはできUIImageView
ますか?
私はあなたがこのような何かをすることができると思っていましたが、それを理解していません.
NSString *currentImageName = [MyIImageView getFileName];
UIImageView's
UIImage
に現在格納されている の名前を読み取ることはできUIImageView
ますか?
私はあなたがこのような何かをすることができると思っていましたが、それを理解していません.
NSString *currentImageName = [MyIImageView getFileName];
UIView の任意のサブクラスに setAccessibilityIdentifier メソッドを使用できます
UIImageView *image ;
[image setAccessibilityIdentifier:@"file name"] ;
NSString *file_name = [image accessibilityIdentifier] ;
いいえ。そんなことはできません。
これは、UIImageView
インスタンスがイメージ ファイルを保存しないためです。UIImage
ディスプレイのインスタンスを格納します。ファイルから画像を作成するときは、次のようにします。
UIImage *picture = [UIImage imageNamed:@"myFile.png"];
これが完了すると、ファイル名への参照はなくなります。UIImage
インスタンスには、どこから取得したかに関係なく、データが含まれています。したがって、 はUIImageView
おそらくファイル名を知ることができませんでした。
また、できたとしても、ビューからファイル名情報を取得することはできません。それはMVCを壊します。
if ([imageForCheckMark.image isEqual:[UIImage imageNamed:@"crossCheckMark.png"]]||[imageForCheckMark.image isEqual:[UIImage imageNamed:@"checkMark.png"]])
{
}
これを行うネイティブな方法はありません。ただし、この動作は自分で簡単に作成できます。
新しいインスタンス変数をサブクラス化UIImageView
して追加できます。
NSString* imageFileName;
次にsetImage
、最初に設定imageFileName
している画像のファイル名に設定してから、を呼び出すことができます[super setImage:imageFileName]
。このようなもの:
-(void) setImage:(NSString*)fileName
{
imageFileName = fileName;
[super setImage:fileName];
}
ネイティブにできないからといって、それができないわけではありません:)
いいえ。それをネイティブで行う方法はありません。UIImageView をサブクラス化し、imageFileName プロパティ (画像の設定時に設定) を追加する必要があります。
UIImage ではなく UIImageView は、ロードされた画像のファイル名を保持しません。
次のいずれかを実行できます
1: (上記の Kenny Winker が提案したように) UIImageView をサブクラス化して fileName プロパティを持つか、
2: 画像ファイルに番号を付けて (image1.jpg、image2.jpg など)、それらの画像に対応する番号のタグを付けます (image1.jpg の場合は tag=1、image2.jpg の場合は tag=2 など)。
3: UIImageView の画像を更新するたびに更新されるクラス レベルの変数 (例: NSString *currentFileName) を用意します。
このコードはあなたを助けます:-
- (NSString *)getFileName:(UIImageView *)imgView{
NSString *imgName = [imgView image].accessibilityIdentifier;
NSLog(@"%@",imgName);
return imgName;
}
これを次のように使用します:-
NSString *currentImageName = [self getFileName:MyIImageView];
imagename を UImageView に関連付けるために、目的の c ランタイム機能を使用できます。
#import <objc/runtime.h>
クラスの最初のインポート
次に、以下のようにコードを実装します。
NSString *filename = @"exampleImage";
UIImage *image = [UIImage imagedName:filename];
objc_setAssociatedObject(image, "imageFilename", filename, OBJC_ASSOCIATION_COPY);
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
//You can then get the image later:
NSString *filename = objc_getAssociatedObject(imageView, "imageFilename");
お役に立てば幸いです。
はい、以下のコードのようなデータの助けを借りて比較できます
UITableViewCell *cell = (UITableViewCell*)[self.view viewWithTag:indexPath.row + 100];
UIImage *secondImage = [UIImage imageNamed:@"boxhover.png"];
NSData *imgData1 = UIImagePNGRepresentation(cell.imageView.image);
NSData *imgData2 = UIImagePNGRepresentation(secondImage);
BOOL isCompare = [imgData1 isEqual:imgData2];
if(isCompare)
{
//contain same image
cell.imageView.image = [UIImage imageNamed:@"box.png"];
}
else
{
//does not contain same image
cell.imageView.image = secondImage;
}
私はこの問題に対処しました.MVCデザインパターンによって解決されました.Cardクラスを作成しました:
@interface Card : NSObject
@property (strong,nonatomic) UIImage* img;
@property (strong,nonatomic) NSString* url;
@end
//次に、実行UIViewController
するDidLoad
メソッドで:
// init Cards
Card* card10= [[Card alloc]init];
card10.url=@"image.jpg";
card10.img = [UIImage imageNamed:[card10 url]];
// 例えば
UIImageView * myImageView = [[UIImageView alloc]initWithImage:card10.img];
[self.view addSubview:myImageView];
//画像名を確認したい場合は、次のようにします。
//例えば
NSString * str = @"image.jpg";
if([str isEqualToString: [card10 url]]){
// your code here
}