2016-04-22 7 views
1

Wie zu wissen, dass eine UIView die Größe ändert und der Rahmen zunimmt oder abnimmt (oder Innenseite oder Außenseite)?Wie erkennt man, dass eine UIView auf die innere oder äußere Seite skaliert?

Für z.B. Ich habe eine UIImageView (und ich verwende eine dritte Partei library, um die Größe eines Objekts zu ändern). Sein derzeitiger Rahmen ist (someX, anyY, 200,50), jetzt, wenn ich die Größe verändere, ändert sich die Breite auf 300 und in einem anderen Fall wird sie auf 150 geändert. Ich sollte wissen, dass sie erhöht/verringert ist.

+0

möglich duplizieren http://stackoverflow.com/questions/4000664/is-there-a-uiview-resize-event – luiyezheng

+0

@luiyezheng, ja, aber ich möchte wissen, ob er eine Größe erhöht oder verringert wird? – Hemang

Antwort

0

konnte ich es auf diese Weise tun,

Hinzugefügt einen benutzerdefinierten Delegaten in oben Bibliothek (SPUserResizableView.h), - (void)userResizableViewIsResizing:(SPUserResizableView *)userResizableView {}

- (void)userResizableViewIsResizing:(SPUserResizableView *)userResizableView { 
    id contentView = userResizableView.contentView; 
    if([contentView isKindOfClass:[iOTextField class]]) { 
     iOTextField *textField = (iOTextField *)contentView;   
     if([self isResizingUpWithOriginalSize:textField.referenceiOProperties.originalSize currentSize:userResizableView.frame.size withiOTextField:textField]) { 
      [textField increaseFont]; 
     } else { 
      [textField decreaseFont]; 
     } 
    } 
} 

- (BOOL) isResizingUpWithOriginalSize:(CGSize)original currentSize:(CGSize)currentSize withiOTextField:(iOTextField *)textField { 
    CGFloat width = (currentSize.width - original.width); 
    CGFloat height = (currentSize.height - original.height); 
    if(width <= 0.0f && height <= 0.0f) { 
     textField.lastWidth = width; 
     textField.lastHeight = height; 
     return NO; 
    } else if(width > textField.lastWidth) { 
     if(textField.lastWidth <= 0.0f) { 
      textField.lastWidth = width; 
      textField.lastHeight = height; 
      return NO; 
     } 
     textField.lastWidth = width; 
     textField.lastHeight = height; 
     return YES; 
    } else if(height > textField.lastHeight) { 
     if(textField.lastHeight <= 0.0f) { 
      textField.lastWidth = width; 
      textField.lastHeight = height; 
      return NO; 
     } 
     textField.lastWidth = width; 
     textField.lastHeight = height; 
     return YES; 
    } else { 
     textField.lastWidth = width; 
     textField.lastHeight = height; 
     return NO; 
    } 
} 

Nehmen Sie an diesem Berührungsereignis eine kleine Änderung in der Klasse SPUserResizableView.m vor.

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {  
    if(self.delegate && [self.delegate respondsToSelector:@selector(userResizableViewIsResizing:)]) { 
     [self.delegate userResizableViewIsResizing:self]; 
    } 
} 
0

Sie können einige Key-Value Observing tun. Zum Beispiel, wenn Ihr UIImageView *imageView dann können Sie:

[imageView addObserver:self forKeyPath:@"frame" options:0 context:NULL]; 

Sie müssen auch auf die Veränderungen dieses Verfahren implementieren, um zu reagieren:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    UIImageView *imageView = (UIImageView *)object; 
    // Do what you gotta do, like save the current size in 
    // an instance variable so you can compare and see increase/decrease in size 
} 
Verwandte Themen