在XCode中使用单击手势旋转图像

时间:2013-11-28 20:52:12

标签: ios objective-c 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];之前的循环中:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                                            action:@selector(didSingleTap:)];
                singleTap.numberOfTapsRequired = 1;
                [currentImage addGestureRecognizer:singleTap];

但我无法理解,在哪里更进一步。

提前感谢您的帮助,抱歉我的英语不好,希望您能理解它。

2 个答案:

答案 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