Я хочу масштабировать (снижать) изображение профиля на основе прокрутки. Но, главное, я хочу масштабировать его не от центральной точки, а от нижнего правого угла. Значит, что нижний правый угол должен быть установлен и изображение должно быть сжиматься от левого и верхнего края, как показано на картинке:Масштаб UIView не из центра, а из нижнего правого угла с использованием CATransform3DScale
—————————————————
| |
| ———————————-
| | |
| | |
| | —————|
| | | |
| | | |
—————————————————
Вот что я делаю. Фото называется imgVwProfilePic
:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat offset = scrollView.contentOffset.y;
CATransform3D avatarTransform = CATransform3DIdentity;
CATransform3D headerTransform = CATransform3DIdentity;
viewHeader.alpha = 1.0;
// PULL DOWN -----------------
if(offset < 0)
{
CGFloat headerScaleFactor = -(offset)/CGRectGetHeight(viewHeader.bounds);
int headerSizevariation = ((CGRectGetHeight(viewHeader.bounds) * (1.0 + headerScaleFactor)) - CGRectGetHeight(viewHeader.bounds))/2.0;
headerTransform = CATransform3DTranslate(headerTransform, 0, headerSizevariation, 0);
headerTransform = CATransform3DScale(headerTransform, 1.0 + headerScaleFactor, 1.0 + headerScaleFactor, 0);
viewHeader.layer.transform = headerTransform;
}
// SCROLL UP/DOWN ------------
else
{
CGFloat offset_HeaderStop = viewHeader.frame.size.height;
headerTransform = CATransform3DTranslate(headerTransform, 0, MAX(-offset_HeaderStop, -offset), 0);
float avatarScaleFactor = (MIN(offset_HeaderStop, offset))/CGRectGetHeight(imgVwProfilePic.bounds)/3.8; //1.4// Slow down the animation
float avatarSizeVariation = ((CGRectGetHeight(imgVwProfilePic.bounds) * (1.0 + avatarScaleFactor)) - CGRectGetHeight(imgVwProfilePic.bounds))/2.0;
avatarTransform = CATransform3DTranslate(avatarTransform, 0, avatarSizeVariation, 0);
avatarTransform = CATransform3DScale(avatarTransform, 1.0 - avatarScaleFactor, 1.0 - avatarScaleFactor, 0);
if(offset <= offset_HeaderStop){
if(imgVwProfilePic.layer.zPosition < viewHeader.layer.zPosition){
viewHeader.layer.zPosition = 0;
}
}
else {
if (imgVwProfilePic.layer.zPosition >= viewHeader.layer.zPosition){
viewHeader.layer.zPosition = 2;
}
}
}
// Apply Transformations
viewHeader.layer.transform = headerTransform;
imgVwProfilePic.layer.transform = avatarTransform;
}
Теперь я пришел знаю, что я должен установить точку привязки для этой точки зрения изображения. Но я понятия не имею, где я это установлю. Я установил его в viewDidLoad
, но он изменил исходный фрейм этого изображения.
- (void)viewDidLoad
{
imgVwProfilePic.layer.anchorPoint = CGPointMake(1, 1); // 1,1 for bottom right corner...
}
Пожалуйста, дайте мне руководство.
Спасибо заранее!
но где я буду называть метод setFrame? – NSPratik
Где угодно. – iAdjunct
'imgVwProfilePic.layer.anchorPoint = CGPointMake (1, 1); imgVwProfilePic.layer.transform = avatarTransform; [imgVwProfilePic setFrame: imgVwProfilePic.frame]; ' – NSPratik