[英]Rotate images with single tap gesture in XCode
因此,我正在使用Xcode 5,OS X Mavericks。 我的項目中有故事板,只有一個視圖。 通過編程,我在視圖中循環添加了約384個UIImageViews。 這是我使用的代碼:
-(void)setImageViewsImages {
[self create Randoms]; //it creates random numbers for definition of rotation direction (rn)
for (i = 0; i < 480; i++) {
currentImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];
currentImage.frame = CGRectMake(x, y, 20, 20);
if (rn == 1) {
CGAffineTransform imageRotation = CGAffineTransformMakeRotation(0);
currentImage.transform = imageRotation;
} else {
switch (rn) {
case 2: {
CGAffineTransform imageRotation = CGAffineTransformMakeRotation(M_PI * 0.5);
currentImage.transform = imageRotation;
}
break;
case 3: {
CGAffineTransform imageRotation = CGAffineTransformMakeRotation(M_PI);
currentImage.transform = imageRotation;
}
break;
case 4: {
CGAffineTransform imageRotation = CGAffineTransformMakeRotation(M_PI * 1.5);
currentImage.transform = imageRotation;
}
break;
}
}
[self.view addSubview:currentImage];
x = x + 20;
if (x == 320) {
x = 0;
y = y + 20;
}
}
}
因此,我的問題是:我想在每個創建的圖像上添加一個輕擊手勢識別器,然后,當所有圖像都在其位置時,我希望有機會向右旋轉每個圖像(或向左旋轉)問題)。 我編寫了這段代碼,並將其放在[self.view addSubview:currentImage];
之前的循環中[self.view addSubview:currentImage];
,:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(didSingleTap:)];
singleTap.numberOfTapsRequired = 1;
[currentImage addGestureRecognizer:singleTap];
但我不知道該怎么走。
預先感謝您的幫助,並感謝我英語不好,希望您能理解。
基本上,您現在缺少的唯一鏈接是從didSingleTap:
訪問didSingleTap:
實例。 IMO的正確方法是將UIImageView
子類化,而是實例化您的子類,並在UITapGestureRecognizer
添加UITapGestureRecognizer
時在子類實例中調用方法。 最合適的方法是將回調委托給您的視圖控制器,如下所示:
。H
@class RotatingImageView;
@protocol RotatingImageViewDelegate <NSObject>
@required
-(void) rotatingImageViewWasTapped:(RotatingImageView*) rotatingImageView;
@end
@interface RotatingImageView : UIImageView
@property (nonatomic,weak) id<RotatingImageViewDelegate> delegate;
-(void) onTap:(UITapGestureRecognizer*) sender;
@end
.m
@implementation RotatingImageView
- (id)initWithImage:(UIImage *)image
{
self = [super initWithImage:image];
if (self) {
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
singleTap.numberOfTapsRequired = 1;
[self addGestureRecognizer:singleTap];
}
return self;
}
-(void)onTap:(UITapGestureRecognizer *)sender
{
[self.delegate rotatingImageViewWasTapped:self];
}
@end
然后,您的視圖控制器將實現RotatingImageViewDelegate
協議,將其自身分配為每個RotatingImageView
實例的委托,並且在每次輕擊時,它將接收rotatingViewWasTapped:
回調,並在參數中包含適當的圖像視圖。 您可以直接在子類內的onTap:
方法中進行邏輯處理,也可以在視圖控制器中進行處理。
為什么要重新創建UICollectionView
的邏輯?
您聲明自己處於特立獨行狀態,因此對iOS 5的支持不是問題。
我的建議是建立一個UICollectionViewController
,使用UICollectionViewFlowLayout
用的itemSize 20, 20
,並創建一個自定義單元格。
在setSelected方法中,對圖像進行如下轉換:
- (void)setSelected:(BOOL)selected;
{
[super setSelected:selected];
self.imageView.transform = CGAffineTransformMakeRotation((arc4random() % 4) * M_PI);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.