Как я могу предотвратить перемещение UIImage за пределы его UIImageView? - PullRequest
1 голос
/ 06 декабря 2011

Я пытаюсь создать приложение на основе фотографий и хочу обрезать, поворачивать и перемещать полученное изображение. Я уже сделал эти вещи, но созданный UIImage перемещается вокруг всего UIViewController, и я только хочу, чтобы он перемещался внутри его UIImageView. Кто-нибудь может подсказать, как я могу попробовать это? Я уже пробовал несколько способов, но они, похоже, не сработали. Любые предложения будут действительно полезны. Спасибо!

Обновление

Я добавляю в свой код, чтобы помочь лучше объяснить, что я пытаюсь сделать. Прошу прощения, что не делал этого раньше.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
//the 'image' below is the UIImage, it has already been declared before hand
image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

//layoutOne is my UIView which holds my UIImageView and UIImage. all of those are declared in my .h file.

layoutOne = [[UIView alloc] initWithFrame:CGRectMake(95.0, 107.0, 578, 682)];
theImageView = [[UIImageView alloc] initWithFrame:[layoutOne frame]];
[theImageView setImage:image];
[layoutOne addSubview:theImageView];

UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
[pinchRecognizer setDelegate:self];
[layoutOne addGestureRecognizer:pinchRecognizer];

UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
[rotationRecognizer setDelegate:self];
[layoutOne addGestureRecognizer:rotationRecognizer];

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[layoutOne addGestureRecognizer:panRecognizer];


UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[tapRecognizer setNumberOfTapsRequired:1];
[tapRecognizer setDelegate:self];
[layoutOne addGestureRecognizer:tapRecognizer];

[self.view addSubview:layoutOne];
}

Я использую Interface Builder для создания своего приложения, а также использую новейшую версию Xcode. Думаю, я бы добавил, что это помогло. Спасибо

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Не уверен, что ваша текущая настройка, но убедитесь, что ваше свойство UIImageView clipsToBounds установлено на YES.

Если это не отвечает на ваш вопрос, попробуйте проверить ответы на Обрезка UIImage , который, похоже, описывает подобную проблему.

0 голосов
/ 06 декабря 2011

Я не думаю, что вы можете перемещать изображение в окне просмотра. Что вы можете сделать, это создать UIView в качестве рамки и переместить изображение в пределах рамки. Ниже приведен фрагмент кода (iOS 5 с ARC), который, я надеюсь, поможет.

@implementation ImageFrame
{
    UIImageView *imageView;
    CGPoint previousPoint;
}

- (id)initWithFrame:(CGRect)frame andImage:(UIImage *)image
{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor greenColor];
        self.clipsToBounds = YES;
        imageView = [[UIImageView alloc] initWithImage:image];
    }
    return self;
}

- (void)layoutSubviews
{
    [self addSubview:imageView];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    previousPoint = [[touches anyObject] locationInView:self];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:self];
    CGPoint movePoint = CGPointMake(location.x - previousPoint.x, location.y - previousPoint.y);
    CGPoint newCenter = CGPointMake(imageView.center.x + movePoint.x, imageView.center.y + movePoint.y);
    imageView.center = newCenter;
    previousPoint = location;
}

@end
...