0

このメソッドは、写真のサイズを変更した後に呼び出されます。

- (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];
}

写真のサイズを丸めます。幅 66 は 50、178 から 200 などに丸められます。setFrame メソッドを使用すると問題なく動作しますが、回転も使用しているため、setBounds を使用したいと考えています。

setBounds を使用すると、ビューのサイズが変更されますが、300 のような丸められた数値にサイズ変更されるのではなく、311.23 のようにランダムにサイズ変更されます。

ここで何か不足していますか?

4

2 に答える 2

1

次のようなものを使用してみてください:

// 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);

それが機能するかどうかわからない単なるアイデア

于 2012-04-05T10:32:34.547 に答える
0

答えは、私が使用しなければならないということです

[view setTransform:CGAffineTransformIdentity];

すでに「使用されている」行列を使用して、それを乗算します。

    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];
于 2012-04-10T09:10:01.280 に答える