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ć ....
2 odpowiedzi
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ź
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;
}
Podobne pytania
Nowe pytania
iphone
NIE używaj tego znacznika, chyba że adresujesz konkretnie iPhone'a i / lub iPoda touch firmy Apple. W przypadku pytań niezależnych od sprzętu użyj tagu [ios]. Więcej tagów do rozważenia to [xcode] (ale tylko jeśli pytanie dotyczy samego IDE), [swift], [objective-c] lub [cocoa-touch] (ale nie [cocoa]). Proszę powstrzymać się od pytań dotyczących iTunes App Store lub iTunes Connect. Jeśli używasz języka C #, oznacz tagiem [mono].