Tworzę aplikację, która zapewnia niestandardowe przycinanie obrazu…. w którym użytkownik wybiera jedną część obrazu za pomocą prostokąta, który powinien zostać zmieniony i może zostać przesunięty zgodnie z dotykiem użytkownika, aby przyciąć tę część……

Chcę uzyskać prostokąt na obrazie, abym mógł przyciąć tę część za pomocą następującej metody

Jestem w stanie przyciąć prostokąt na obrazie postępując zgodnie z metodą

-(void) cropImage
{
   CGSize size = iv.frame.size;

   CGRect rect = CGRectMake(size.width / 4, size.height / 4, size.width/2,size.height / 2);

   CGImageRef imageRef = CGImageCreateWithImageInRect([iv.image CGImage], rect);    
   UIImage *img = [UIImage imageWithCGImage:imageRef]; 

   CGImageRelease(imageRef);        

   // Display Image     
   UIImageView *imageView = [[UIImageView alloc] initWithImage:img];    
   [imageView setFrame:CGRectMake(70.0, 480.0,(size.width / 2), (size.height / 2))];    
   [scrollView addSubview:imageView]; 

   [imageView release];

   [scrollView scrollRectToVisible:imageView.frame animated:YES];

}

Chcę rozwiązania do rysowania prostokąta, którego rozmiar można zmieniać dotykiem i przesuwać dotykiem ...

Jestem nowy w iPhone'ie, więc .... pls pomóż mi, jak to zrobić ....

0
P R J 9 kwiecień 2012, 17:34

2 odpowiedzi

Najlepsza odpowiedź

Otrzymałem odpowiedź z ładnego przykładu z tego linku Image Cropper..

Jeśli ktoś ma coś lepszego, wrzuć to tutaj .... jeśli zasługuje na to, że zaakceptuję tę odpowiedź

2
P R J 3 październik 2012, 09:18

Oto proste podejście przy użyciu UILongGesture z 2 palcami. Prostokąt wyboru ogranicza się do dotknięć. SelectionView jest początkowo ukrytym UIView.

To jest inicjalizacja gestu w UIViewController:

UILongPressGestureRecognizer *twoFingerLongGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleTwoFingerLongGesture:)];
[twoFingerLongGesture setNumberOfTouchesRequired:2];
[self.view addGestureRecognizer:twoFingerLongGesture];

A oto obsługa gestu:

- (void)handleTwoFingerLongGesture:(UIGestureRecognizer *)sender
{
    switch (sender.state) {
        case UIGestureRecognizerStateBegan:
        {
            NSLog(@"mainView 2FingerLONG - UIGestureRecognizerStateBegan");
            CGPoint p1 = [sender locationOfTouch:0 inView:self.view];
            CGPoint p2 = [sender locationOfTouch:1 inView:self.view];
            [self updateFrameSelectionWithPoint1:p1 point2:p2];
            [self.view bringSubviewToFront:selectionView];
            selectionView.hidden = NO;
            break;
        }
        case UIGestureRecognizerStateChanged:
        {
            NSLog(@"mainView 2FingerLONG - UIGestureRecognizerStateChanged");
            CGPoint p1 = [sender locationOfTouch:0 inView:self.view];
            CGPoint p2 = [sender locationOfTouch:1 inView:self.view];
            [self updateFrameSelectionWithPoint1:p1 point2:p2];
            break;
        }
        case UIGestureRecognizerStateEnded:
        {
            selectionView.hidden = YES;
            // Here you must perform the selection
            break;
        }
        case UIGestureRecognizerStateCancelled:
        {
            selectionView.hidden = YES;
            break;
        }
        default:
            break;
    }
}

- (void) updateFrameSelectionWithPoint1:(CGPoint)p1 point2:(CGPoint)p2
{
    CGRect frameSelection;
    frameSelection.origin.x = fminf(p1.x, p2.x);
    frameSelection.origin.y = fminf(p1.y, p2.y);
    frameSelection.size.width = fabsf(p1.x - p2.x);
    frameSelection.size.height = fabsf(p1.y - p2.y);
    selectionView.frame = frameSelection;
}
0
Emil 2 październik 2012, 02:34