Scaled live iPhone Camera view in center, “CGAffin

2019-01-23 08:28发布

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.

3条回答
聊天终结者
2楼-- · 2019-01-23 08:59

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.

查看更多
可以哭但决不认输i
3楼-- · 2019-01-23 09:06

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)];
查看更多
啃猪蹄的小仙女
4楼-- · 2019-01-23 09:12

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.
}
查看更多
登录 后发表回答