![](/img/trans.png)
[英]Best practice for animated image in iOS - UIImage or UIImageView?
[英]How to Get Image from Animated UIImageView in iOS
所以我有一個UIImageView和四個UIImages的NSMutuableArray。
我只是使該UIImageView動畫化,所有四個圖像都在該imageview中進行了一系列應有的動畫設置。
現在我想要的是:當用戶點擊ImageView時,
USER剛剛點擊了哪個圖像 。
UIImageView User Intraction is enabled
UIGestureRecognizerDelegate is Added
-(void)viewDidAppear:(BOOL)animated
{
UITapGestureRecognizer *tapGesture =
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTaps:)];
tapGesture.numberOfTapsRequired = 1;
[myImageView addGestureRecognizer:tapGesture];
[self performSelectorInBackground:@selector(showAnimatedImages) withObject:nil];
[super viewDidAppear:animated];
}
- (void) showAnimatedImages
{
myImageView.animationImages = imagesArray;
myImageView.animationDuration = 12.0f;
[myImageView startAnimating];
}
- (void)handleTaps:(UITapGestureRecognizer *)sender
{
if (sender.state == UIGestureRecognizerStateRecognized)
{
UIImage *selectedImage = [myImageView image]; // return nil
//OR
UIImage *selectedImage = myImageView.image; // return nil
//OR
NSData *imgData = UIImagePNGRepresentation(myImageView.image); // return nil
}
}
如您所見,myImageView.image始終為我提供nil值。
所以請告訴我如何從該動畫imageview獲取圖像。
該解決方案將以不同的方式進行。
基本上,從動畫imageview中我們無法獲得當前圖像。
動畫也是如此
-(void)animateImages
{
count++;
[UIView transitionWithView:imageSlideshow
duration:2.0f // this is caliculated as animationduration/numberofimage
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
imageSlideshow.image = [imagesArray objectAtIndex: count % [imagesArray count]];
} completion:^(BOOL finished) {
[self animateImages];
}];
}
現在,以點擊手勢,您將獲得圖像
對於點擊手勢不適用於您編輯的解決方案,請確保已啟用針對圖像視圖的用戶交互,並且您已正確設置了手勢的手勢。 如果仍然不起作用,則:
我不為這個解決方案感到驕傲,是的,這不是一個很好的解決方案,但是如果您找不到其他任何內容,則可以隨時使用。 您可以通過手動計算來找到當前選擇的圖像。
- (void) showAnimatedImages
{
float duration = 6;
index = 0; // declared in .h file
imageView.animationImages = imagesArray;
imageView.animationDuration = duration;
[imageView startAnimating];
float secs = duration/[imagesArray count];
// timer also declared in .h file
timer = [NSTimer scheduledTimerWithTimeInterval:secs target:self selector:@selector(changeToNextImage) userInfo:nil repeats:YES];
}
-(void)handleTaps:(UITapGestureRecognizer*)sender
{
NSLog(@"current Selected Image is at index %d",index);
}
-(void)changeToNextImage
{
index++;
if(index == [imagesArray count])
index = 0;
}
完成動畫后,請確保使計時器無效。
enter code here
if (myImageView.image){
// Image on Imageview
}else {
// Image is not available on Imageview
}
The above condition always go to else block , better follow this post
http://stackoverflow.com/questions/12858028/detect-which-image-was-clicked-in-uiimageview-with-animationimages
感謝所有嘗試在此問題上幫助我的人。
我要發布的解決方案是我從我的問題的其他建議以及其他一些帖子中找到的。
在我的viewDidAppear方法中
-(void)viewDidAppear:(BOOL)animated
{
timer = [NSTimer scheduledTimerWithTimeInterval:6.0f target:self selector:@selector(showAnimatedImages) userInfo:nil repeats:YES];
}
而選擇器方法是
- (void) showAnimatedImages
{
if (index > [imagesArray count])
{
index = 0; // start from first index again
}
myImageView.image = [imagesArray objectAtIndex:index];
//NSLog(@"View index is = %d",index);
index ++;
}
和點擊手勢處理方法,因為我在Array中只有四個圖像。
- (void)handleTaps:(UITapGestureRecognizer *)sender
{
if (sender.state == UIGestureRecognizerStateRecognized)
{
if (index == 1)
{
// do related stuff
}
else if (index == 2)
{
// do related stuff
}
else if (index == 3)
{
// do related stuff
}
else if (index == 4)
{
// do related stuff
}
}
}
在移至下一個視圖或場景之前,我只是做
[timer invalidate];
所以實現了UIImageView動畫和在Tap Gesture上的圖像選擇... :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.