Что я хочу : https://imgur.com/zE6kgb1
Чего я достиг : https://imgur.com/8Ylq5yp
Ниже приведена функция, которую я использую:
- (void) showViewWithImageFromAsset: (PHAsset *) asset
{
UIView *imageContainer = [[UIView alloc] initWithFrame:CGRectMake(25, 320, 400, 400)];
[imageContainer setBackgroundColor:[UIColor whiteColor]];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 250, 200)];
CGFloat shadowRadius = 0.0;
CGFloat width = imageView.frame.size.width;
CGFloat height = imageView.frame.size.height; // Get width and height of the view
// Plot the path
UIBezierPath *shadowPath = [[UIBezierPath alloc] init];
[shadowPath moveToPoint:CGPointMake(width, 0)];
[shadowPath addLineToPoint:CGPointMake((width)+10, 10)];
[shadowPath addLineToPoint:CGPointMake((width)+10, height-10)];
[shadowPath addLineToPoint:CGPointMake(width, height)];
imageView.layer.shadowColor = UIColor.blackColor.CGColor;
imageView.layer.shadowPath = shadowPath.CGPath;
imageView.layer.shadowRadius = shadowRadius;
imageView.layer.shadowOffset = CGSizeZero;
imageView.layer.shadowOpacity = 1.0;
PHImageRequestOptions *requestOptions = [[PHImageRequestOptions alloc] init];
requestOptions.resizeMode = PHImageRequestOptionsResizeModeExact;
requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
requestOptions.synchronous = YES;
PHImageManager *manager = [PHImageManager defaultManager];
// assets contains PHAsset objects.
__block UIImage *ima;
[manager requestImageForAsset:asset
targetSize:PHImageManagerMaximumSize
contentMode:PHImageContentModeDefault
options:requestOptions
resultHandler:^void(UIImage *image, NSDictionary *info) {
ima = image;
dispatch_async(dispatch_get_main_queue(), ^{
[imageView setImage:ima];
CATransform3D t = CATransform3DIdentity;
t.m34 = .005;
imageContainer.layer.sublayerTransform = t;
imageView.layer.transform = CATransform3DMakeRotation(-10,0,1,0);
[imageContainer addSubview:imageView];
//[imageContainer addSubview:imageSideView];
[self.view addSubview:imageContainer];
[self.view bringSubviewToFront:imageView];
});
}];
}
Как видите, я достиг желаемого эффекта, хотя с помощью инвертированного (или зеркального) изображения.Я не намерен использовать какие-либо сторонние фреймворки / библиотеки для достижения этой цели, поскольку знаю, что это возможно, изменив существующий код.
Хотя я могу изменить значение y в CATransform3DMakeRotation (-10,0,1,0), от 1 до 0, чтобы получить правильную ориентацию изображения, что также изменит перспективу на это https://imgur.com/yKL4NQA
Мне нужно что-то, чтобы получить правильное изображение без изменения перспективы.Любая помощь очень ценится.