所以,我在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];
之前的循环中:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(didSingleTap:)];
singleTap.numberOfTapsRequired = 1;
[currentImage addGestureRecognizer:singleTap];
但我无法理解,在哪里更进一步。
提前感谢您的帮助,抱歉我的英语不好,希望您能理解它。
答案 0 :(得分:0)
基本上,您现在唯一缺少的是从didSingleTap:
访问imageView实例。正确的方式IMO将继承UIImageView
,实例化您的子类,并在向其调用子类实例中的方法时添加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:
方法中执行逻辑,也可以在视图控制器中处理它。
答案 1 :(得分:0)
为什么要重新创建UICollectionView
的逻辑?
你说你是小牛队,所以iOS 5的支持不是问题。
我的建议是创建UICollectionViewController
,将UICollectionViewFlowLayout
与item {1}一起使用并创建自定义单元格。
在setSelected方法中,将图像转换为:
20, 20