Więc próbuję od razu dowiedzieć się, co robię źle, i nie mogę tego rozgryźć. Co staram się osiągnąć to:Zmiana rozmiaru UII nie działa prawidłowo
- Zrób zdjęcie z
UIImagePickerController
- Take wynikowy fotografię i przyciąć poza górną i dolną tak staje kwadrat (podobny do Instagram)
- wyświetlacz, który obraz w
UIButton
z jakiegoś powodu, za każdym razem biorę fotografię kończy się zniekształcony w UIButton
i wydaje się jakby przycinania nie działa prawidłowo. Oto co robię. W ramach metody didFinishPickingMediaWithInfo
Mam następujący kod:
- (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];
}
będę obejmują metodę resizeAndRotatePhoto chwilę, ale wynik jest poniżej. Ponadto w powyższym kodzie @property (strong) (UIImage *)userImage;
jest zdefiniowany w pliku nagłówkowym ViewController. Wynik logu powoduje również:
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
Jak widać na poniższym obrazku, zostanie zniekształcony.
chodzi o metodę resizeAndRotate, tutaj jest:
- (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];
}
W tym momencie nie mam pojęcia w jaki sposób uzyskać obraz, aby pokazać się niezakłócona. Wygląda na to, że przycina go nieprawidłowo i wyświetla błąd, mimo że system mówi, że obraz jest rzeczywiście kwadratem.
dziękuję. Po wielu godzinach frustracji i szukania w sieci próbując blisko 20 zaproponowanych rozwiązań, jest to jedyne rozwiązanie, które zadziałało. Wielkie dzięki. – thephatp
tak. zaoszczędził mi również godzin pracy. Doceniam kategorię! – kevinl