Итак, я уже какое-то время пытаюсь понять, что я делаю не так, и никак не могу понять. Вот что я пытаюсь сделать::
UIImagePickerController
UIButton
По какой-то причине каждый раз, когда я делаю снимок, он искажается в пределах UIButton
, и кажется, что обрезка не работает должным образом. Вот что я делаю. В методе didFinishPickingMediaWithInfo
у меня есть следующий код:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//Copy the image to the userImage variable
[picker dismissModalViewControllerAnimated:YES];
userImage = nil;
//Rotate & resize image
userImage = [self resizeAndRotatePhoto:(UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage]];
NSLog(@"Userimage size, width: %f, height: %f", userImage.size.width, userImage.size.height);
//Update the image form field with the image and set the image in the controller
NSLog(@"Button size is height: %f, width: %f", userImageAvatarButton.frame.size.height, userImageAvatarButton.frame.size.width);
[userImageAvatarButton.layer setMasksToBounds:YES];
[userImageAvatarButton.layer setCornerRadius:3.0];
[userImageAvatarButton setImage:userImage forState:UIControlStateNormal];
}
Я на мгновение включу метод resizeAndRotatePhoto, но результат ниже. Кроме того, в приведенном выше коде @property (strong) (UIImage *)userImage;
определяется в заголовочном файле ViewController. Вывод журнала также приводит к :
2012-05-07 17:38:07.995 NewApp[10666:707] Userimage size, width: 1936.000000, height: 1936.000000
2012-05-07 17:38:08.000 NewApp[10666:707] Button size is height: 60.000000, width: 60.000000
. Как вы видите на изображении ниже, он оказывается искаженным.
Что касается метода resizeAndRotate, то вот он.:
- (UIImage *)resizeAndRotatePhoto:(UIImage *)source
{
if( source.imageOrientation == UIImageOrientationRight )
{
source = [self rotateImage:source byDegrees:90];
}
if( userImage.imageOrientation == UIImageOrientationLeft)
{
source = [self rotateImage:source byDegrees:-90];
}
CGFloat x,y;
CGFloat size;
if( source.size.width > source.size.height ){
size = source.size.height;
x = (source.size.width - source.size.height)/2;
y = 0;
}
else {
size = source.size.width;
x = 0;
y = (source.size.height - source.size.width)/2;
}
CGImageRef imageRef = CGImageCreateWithImageInRect([source CGImage], CGRectMake(x,y,size,size) );
return [UIImage imageWithCGImage:imageRef];
}
На данный момент я понятия не имею, как сделать так, чтобы это изображение отображалось неискаженным. Похоже, он неправильно обрезает и отображает неправильно, несмотря на то, что система говорит, что изображение действительно квадратное.