簡體   English   中英

在XCode中通過單擊手勢旋轉圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM