2012-04-05 27 views
0

Diese Methode wird aufgerufen, nachdem ich ein Foto der Größe:setBound Breite und Höhe

- (void)correctSize:(UIView*)view{ 
    //check if the newWidth is rounded by 50 
    CGFloat correctWidth = roundf(_lastScale*_lastWidth/XPCollageGridHorizontalStepSize) * XPCollageGridHorizontalStepSize; 
    CGFloat correctHeight = roundf(_lastScale*_lastHeight/XPCollageGridVerticalStepSize) * XPCollageGridVerticalStepSize; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.5f]; 
    [view setBounds:CGRectMake(view.bounds.origin.x, view.bounds.origin.y, correctWidth, correctHeight)]; 
    //[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, correctWidth, correctHeight)]; 
    [UIView commitAnimations]; 
} 

Es die Fotogröße rundet; eine Breite von 66 wird auf 50, 178 bis 200 usw. gerundet. Es funktioniert gut, wenn ich die setFrame-Methode verwende, aber weil ich auch mit Rotation arbeite, möchte ich mit setBounds arbeiten.

Wenn ich setBounds verwende, ändert sich die Größe der Ansicht, aber anstatt die Größe auf eine gerundete Zahl wie 300 zu ändern, wurde die Größe auf eine zufällige Größe wie 311.23 geändert.

Fehle ich hier etwas?

Antwort

0

Die Antwort arbeiten würde, ist, dass ich die

[view setTransform:CGAffineTransformIdentity]; 

Nun ist es die bereits mit verwenden 'benutzte' Matrix und multipliziert sie damit.

CGFloat correctWidth = roundf(_lastScale*_lastWidth/XPCollageGridHorizontalStepSize) * XPCollageGridHorizontalStepSize; 
CGFloat correctHeight = roundf(_lastScale*_lastHeight/XPCollageGridVerticalStepSize) * XPCollageGridVerticalStepSize; 

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.5f]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
[view setTransform:CGAffineTransformIdentity]; //!!this line is added! 
[view setBounds:CGRectMake(0, 0, correctWidth, correctHeight)]; 

[UIView commitAnimations]; 
1

wie mit etwas Ausprobieren:

// see the values here 
NSLog(@"%f", correctWidth); 
NSLog(@"%f", correctHeight); 
view.frame = CGRectMake(view.bounds.origin.x, view.bounds.origin.y, correctWidth, correctHeight); 
// see the values given 
NSLog(@"%f", view.frame.size.width); 
NSLog(@"%f", view.frame.size.height); 

nur eine Idee nicht sicher, ob es