Scaled live iPhone Camera view in center, "CGAffineTransformTranslate" not working
Asked Answered
M

3

7

I have a little problem which I could not solve. I really hope someone can help me with that. I wanted to resize the live camera view and place it in the center, using the following code below:

    picker.cameraViewTransform = CGAffineTransformScale(picker.cameraViewTransform, 0.5, 0.56206);
    picker.cameraViewTransform = CGAffineTransformTranslate(picker.cameraViewTransform, 80, 120);

But all I got was a scaled 1/2 sized view on the top left of the screen. It seems as though "CGAffineTransformTranslate" does nothing at all. The translation didn't work even when I used:

     picker.cameraViewTransform = CGAffineTransformMake(1, 0, 0, 1, 80, 120);

The translation portion seems to have no effect on the live camera view. Hope someone can enlighten me.

Thanks.

Murdock answered 11/1, 2010 at 14:10 Comment(3)
I'm seeing the same behavior.Haymaker
Me too. Don't know the solution.Guitarfish
This appears to be fixed in newer iOS. I'm not sure when they patched it.Pinard
W
5

I was in the same boat. What I did was physically move the picker frame.

[picker.view setFrame:CGRectMake(xOffset,yOffset,picker.view.frame.size.width,picker.view.frame.size.height)];
Wahkuna answered 27/2, 2012 at 0:29 Comment(0)
A
1

I've been banging my head against the same problem. I have confirmed that scaling and rotating the preview works, but translations appear to be ignored. I would speculate that the tx, ty portions of the CGAffineTransform are being ignored when the transform is set. This is with iPhone OS v3.1.2. I don't have other OS versions to test against right now.

Ambition answered 14/4, 2010 at 12:38 Comment(0)
G
-1

I got solution. It must be set on message:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated

Sample code:

#pragma mark -
#pragma mark UINavigationControllerDelegate
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{   
    CGFloat width = [[self view] bounds].size.width;
    CGFloat height = width/4*3;
    CGSize sizeOfCamera = CGSizeMake(width, height);
    CGAffineTransform t = CGAffineTransformMakeScale(0.5, 0.5);
    [picker setCameraViewTransform:t];

    // Now the image is automatically aligned to center.
    // Translation matrix also can be applied, but didn't use because it's already aligned to center.
}
Guitarfish answered 5/6, 2010 at 18:42 Comment(1)
You can certainly try to add the translation, but it will be ignored, just as in the original question.Embolic

© 2022 - 2024 — McMap. All rights reserved.