Ich kann den UIPinchGestureRecognizer
Handler mit Skalierung eines Objekts arbeiten, aber ich möchte nicht skalieren, ich möchte die Größe ändern. Zum Beispiel habe ich eine UITextView
und ich habe eine UIPinchGestureRecognizer
Geste daran angehängt und wenn der Benutzer klemmt Ich möchte die Breite der Textansicht ändern, um die Prise zu entsprechen. Ich möchte es nicht skalieren, also ist die UITextView
größer (Zoomen).Wie kann ich den Pinch-Zoom (UIPinchGestureRecognizer) verwenden, um die Breite eines UITextView zu ändern?
Antwort
Ich denke, was Sie gerade ist die Multiplikation der Breite des Textview-Rahmen mit der Gestenerkenner-Skala zu tun:
CGFloat scale = gestureRecognizer.scale;
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(scale*newFrame.size.width, newFrame.size.height);
textView.frame = newFrame;
Oder ist das nicht, was Sie meinen?
Das scheint nicht zu funktionieren. Die uitextview wächst sehr schnell und verzögert sich. Die Skala kann von 0-20 + –
Odd sein ... Ich hätte das nicht erwartet. Ich habe nie wirklich Gestenerkennung verwendet ... –
Warum nicht diese Antwort löschen? –
Ich mache genau das gleiche. Ich werde diesen Beitrag aktualisieren, wenn ich gefunden habe, wie es geht.
Versuchen Sie dieses, es für mich arbeiten (UIView):
- (IBAction)handlePinchGesture:(UIGestureRecognizer *)sender {
static CGRect initialBounds;
UIView *_view = sender.view;
if (sender.state == UIGestureRecognizerStateBegan)
{
initialBounds = _view.bounds;
}
CGFloat factor = [(UIPinchGestureRecognizer *)sender scale];
CGAffineTransform zt = CGAffineTransformScale(CGAffineTransformIdentity, factor, factor);
_view.bounds = CGRectApplyAffineTransform(initialBounds, zt);
return;
}
Was mir wirklich geholfen hat, ist die _view.bounds = CGRectApplyAffineTransform (initialBounds, zt); Ich habe mich stundenlang gewundert, warum sich meine gebundene Größe nicht geändert hat. Vielen Dank! – Oritm
viele Fehler in diesem Code. – user2083364
stürzt immer ab, wenn dieser Code ausgeführt wird ... – HoangNA
Ich habe vier Routinen, die mit Kneifen eines Textfeldes befassen. Der Gestenerkenner ist die Kernroutine. Es sieht, ob das/die ausgewählte (n) Textfeld (e) vom Bildschirm abgeschnitten werden, das möchte ich nicht. Wenn sie es nicht sind, dann sage ich, dass sie sich mit der Skala der Geste kneifen soll. Wenn mehrere ausgewählt sind, sende ich eine Benachrichtigung für diejenigen, die den Bildschirm nicht abklemmen, um sich selbst zu quetschen.
//--------------------------------------------------------------------------------------------------------
// pinchElement
// Description: Called to di the element scale, in our case, we are adjusting the length.
//
//--------------------------------------------------------------------------------------------------------
- (void)pinchElement:(CGFloat)scale {
//Grab how big we are now
CGRect textFieldBounds = textField.bounds;
//Multiple the Scale of the Pinch by the Width to get our new width.
CGFloat newWidth = textFieldBounds.size.width * scale;
CGFloat widthChange = newWidth - textFieldBounds.size.width;
CGRect newBounds = CGRectMake(0, 0, newWidth, textFieldBounds.size.height);
[textField setBounds: newBounds];
[textField setCenter: CGPointMake(textField.center.x + widthChange/2, textField.center.y)] ;
[self contentSizeChanged];
}
//--------------------------------------------------------------------------------------------------------
// pinchOffScreen
// Description: Called to see if the Pinch Gesture will cause element to go off screen Gesture
//
//--------------------------------------------------------------------------------------------------------
- (BOOL)pinchOffScreen:(CGFloat)scale {
//Grab how big we are now
CGRect textFieldBounds = textField.bounds;
//Multiple the Scale of the Pinch by the Width to get our new width.
CGFloat newWidth = textFieldBounds.size.width * scale;
//Figure out our Change in Width so we can calculate our new Zen Center
CGRect newElementBounds = CGRectMake(0, 0, newWidth+ kElementFrameOffset*2 + kElementContentFrameOffset*2, textFieldBounds.size.height + kElementFrameOffset*2 + kElementContentFrameOffset*2);
//We want to be sure that we dont size beyond our bounds, find our Parent Origin.
CGRect elementBoundsInSuperView = [self convertRect:newElementBounds toView:[self superview]];
CGFloat xPosition = CGRectGetMidX(elementBoundsInSuperView);
CGFloat yPosition = CGRectGetMidY(elementBoundsInSuperView);
BOOL offScreen = [self calcOffEditorFromXposition:xPosition yPosition:yPosition fromBoundsInSuperView:elementBoundsInSuperView];
return offScreen;
}
//--------------------------------------------------------------------------------------------------------
// handlePinchGesture
// Description: Called when we get a Pinch Gesture
// We want to override the default scaling and set the width.
//
//--------------------------------------------------------------------------------------------------------
- (void)handlePinchGesture:(UIPinchGestureRecognizer *)gestureRecognizer {
if (IoUIDebug & IoUIDebugSelectorNames) {
NSLog(@"%@ - %@", INTERFACENAME, NSStringFromSelector(_cmd));
}
// UIView *element = [gestureRecognizer view];
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
//We are resizing, Select ourself
[self selectSelf];
}
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
NSSet *selectedElements = [[(IoScreenEditorViewController *)UIAppDelegate.ioMainViewController.currentViewController editorContentViewController] selectedElements];
BOOL aSelectedElementOffscreen = FALSE;
for (IoUIScreenElement* element in selectedElements) {
if ([element pinchOffScreen:[gestureRecognizer scale]]) {
aSelectedElementOffscreen = TRUE;
break;
}
}
if (!aSelectedElementOffscreen) {
[self pinchElement:[gestureRecognizer scale]];
// Let others know they are moving if they are selected
// Setup our data for the Notification
NSMutableDictionary *theUserInfo = [[[NSMutableDictionary alloc] initWithCapacity:1] autorelease];
[theUserInfo setObject:self forKey:@"ElementWithGesture"];
NSNumber * scaleAsNumber = [[NSNumber alloc] initWithFloat:[gestureRecognizer scale]];
[theUserInfo setValue:scaleAsNumber forKey:@"GestureScale"];
[theUserInfo setObject:gestureRecognizer forKey:@"TheGestureRecognizer"];
[scaleAsNumber release];
// Post the Group Rotation Notification.
[[NSNotificationCenter defaultCenter] postNotificationName:kNCSEGroupPinchGesture
object:nil
userInfo:theUserInfo];
}
[gestureRecognizer setScale:1];
}
if ([gestureRecognizer state] == UIGestureRecognizerStateEnded) {
}
}
//--------------------------------------------------------------------------------------------------------
// groupHandlePinchGesture:
// Description: For a groupPinch Notification. Move it! within bounds of course
//
//--------------------------------------------------------------------------------------------------------
- (void) groupHandlePinchGesture:(NSNotification*)notification{
if (IoUIDebug & IoUIDebugSelectorNames) {
NSLog(@"%@ - %@", INTERFACENAME, NSStringFromSelector(_cmd));
}
IoUIScreenElement *element = (IoUIScreenElement *) [[notification userInfo] objectForKey:@"ElementWithGesture"];
//UIRotationGestureRecognizer *gestureRecognizer = (UIRotationGestureRecognizer *) [[notification userInfo] objectForKey:@"TheGestureRecognizer"];
NSNumber *scaleAsNumber = [[notification userInfo] valueForKey:@"GestureScale"];
CGFloat scale = [scaleAsNumber floatValue];
if (IOFNOTEQUAL(self, element) & [self isSelected]){
[self pinchElement: scale];
}
}
Sie haben in swift verwenden:
func pinchgsterAction(gesture:UIPinchGestureRecognizer){
if (gesture.state == UIGestureRecognizerState.Changed) {
let scale:CGFloat = gesture.scale
gesture.view.transform = CGAffineTransformScale(gesture.view.transform, scale, scale)
}
}
- 1. Kann ich die Breite eines Liniendiagramms ändern?
- 2. Wie kann ich die Breite eines Windows-Konsolenfensters ändern?
- 3. Kann ich Javascript verwenden, um die Sprache zu ändern?
- 4. Kann ich Javascript verwenden, um die Quelle eines Videos dynamisch zu ändern?
- 5. Verwenden von Karte, um die Reihenfolge eines Arrays zu ändern
- 6. Kann ich einen Winkelregler verwenden, um einen anderen zu ändern?
- 7. Wie kann ich Func <> verwenden, um eine einzelne Bedingung eines Lambda zu ändern
- 8. Wie kann ich die Breite einer JComboBox Dropdown-Liste ändern?
- 9. Wie kann ich Schriftart in UITextView in swift ändern?
- 10. Wie bekomme ich die Suche, um den attr_accessor zu verwenden?
- 11. Wie kann ich die Grenzen zu einem MovieClip ändern
- 12. Wie kann ich die Länge eines text_field in Rails ändern?
- 13. Wie kann ich einen Decorator verwenden, um den Typ von * Argumenten zu ändern?
- 14. Kann ich .NET Reflector verwenden, um den Code schnell zu ändern und neu zu kompilieren?
- 15. Ändern der Breite eines iframe
- 16. Wie kann ich die Breite einer Zeile ändern, ohne ihre Strichbreite in inkscape zu ändern?
- 17. Wie kann ich den Fall eines Hash-Schlüssels ändern?
- 18. Wie kann ich in WPF die Breite eines Fensters animieren?
- 19. Wie kann ich die Kernanimation verwenden, um die Hintergrundfarbe eines NSTextFields zu animieren?
- 20. Wie kann ich den Namen eines Windows-Dienstes ändern?
- 21. Wie bekomme ich die Breite eines Elements?
- 22. Verwenden von PinchGesture; Wie kann ich hineinzoomen, wo die Finger eines Benutzers tatsächlich "einklemmen"?
- 23. Wie kann ich UIButton reagieren lassen, um auf die transparenten Bereiche eines PNG-Bildes zu tippen?
- 24. Wie kann ich die Breite eines Feldes auf einem Access-Formular zur Laufzeit ändern?
- 25. Hibernate verwenden hbm2ddl.auto = update: Wie kann ich die Spalte ändern, um keinen Wert mehr zu benötigen?
- 26. Wie kann ich den Standort eines Projekts in Eclipse ändern?
- 27. Wie kann ich den RowState eines ADO.Net DataRow explizit ändern?
- 28. Wie kann ich den Anzeigetext eines MenuItem in Gtk2 ändern?
- 29. Wie kann ich die Anzeige eines anderen Benutzers verwenden?
- 30. Die Breite eines Tisches strecken, um Webbrowser zu passen
Sie nicht schutzlos UIPinchGestureRecognizers angreifen sollte: P –
@KennyTM Haha! Gute Eins ... –
@Jongsma Warum nicht? Es könnte ihn zuerst gequetscht haben! –