Anonymous
Сохранить размер и пространство между видами в Uiscrollview при масштабировании
Сообщение
Anonymous » 29 июн 2025, 22:14
В просмотре прокрутки у меня есть один центральный вид (серый), который должен нормально масштабировать, и некоторые другие виды (оранжевый), которые должны сохранять их визуальный размер и пространство в сером представлении. Знайте, одно из возможных решений - не поставить оранжевые представления в просмотр прокрутки и управлять их движущейся анимацией вручную, но мне интересно, есть ли какое -то решение с использованием вида прокрутки. < /p>
Код: Выделить всё
#import "ViewController.h"
@interface ViewController ()
@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;
@property (strong, nonatomic) IBOutlet UIView *zoomingView;
@property (strong, nonatomic) IBOutlet UIView *view1;
@property (strong, nonatomic) IBOutlet UIView *view2;
@property (strong, nonatomic) IBOutlet UIView *centerView;
@end
@implementation ViewController
{
NSArray *_views;
}
- (void)viewDidLoad
{
[super viewDidLoad];
_views = @[self.view1, self.view2];
}
- (CGFloat)invertedZoomScale
{
return 1.0 / self.scrollView.zoomScale;
}
- (void)updateWithZoom:(CGFloat)zoom
{
for (UIView *view in _views) {
CGFloat tx = 0; // TODO: calculate
CGFloat ty = 0;
if ([view isEqual:_views.firstObject]) {
tx *= -1;
}
CGAffineTransform scaleTransform = CGAffineTransformMakeScale(self.invertedZoomScale, self.invertedZoomScale);
CGAffineTransform translationTransform = CGAffineTransformMakeTranslation(tx, ty);
view.transform = CGAffineTransformConcat(scaleTransform, translationTransform);
}
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.zoomingView;
}
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
[self updateWithZoom:scrollView.zoomScale];
}
@end
Пример проекта
https://github.com/schmidt9/zoomscrollview
Начальная позиция
Подробнее здесь:
https://stackoverflow.com/questions/796 ... en-zooming
1751224482
Anonymous
В просмотре прокрутки у меня есть один центральный вид (серый), который должен нормально масштабировать, и некоторые другие виды (оранжевый), которые должны сохранять их визуальный размер и пространство в сером представлении. Знайте, одно из возможных решений - не поставить оранжевые представления в просмотр прокрутки и управлять их движущейся анимацией вручную, но мне интересно, есть ли какое -то решение с использованием вида прокрутки. < /p> [code]#import "ViewController.h" @interface ViewController () @property (strong, nonatomic) IBOutlet UIScrollView *scrollView; @property (strong, nonatomic) IBOutlet UIView *zoomingView; @property (strong, nonatomic) IBOutlet UIView *view1; @property (strong, nonatomic) IBOutlet UIView *view2; @property (strong, nonatomic) IBOutlet UIView *centerView; @end @implementation ViewController { NSArray *_views; } - (void)viewDidLoad { [super viewDidLoad]; _views = @[self.view1, self.view2]; } - (CGFloat)invertedZoomScale { return 1.0 / self.scrollView.zoomScale; } - (void)updateWithZoom:(CGFloat)zoom { for (UIView *view in _views) { CGFloat tx = 0; // TODO: calculate CGFloat ty = 0; if ([view isEqual:_views.firstObject]) { tx *= -1; } CGAffineTransform scaleTransform = CGAffineTransformMakeScale(self.invertedZoomScale, self.invertedZoomScale); CGAffineTransform translationTransform = CGAffineTransformMakeTranslation(tx, ty); view.transform = CGAffineTransformConcat(scaleTransform, translationTransform); } } - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.zoomingView; } - (void)scrollViewDidZoom:(UIScrollView *)scrollView { [self updateWithZoom:scrollView.zoomScale]; } @end [/code] Пример проекта https://github.com/schmidt9/zoomscrollview [b] Начальная позиция [/b] Подробнее здесь: [url]https://stackoverflow.com/questions/79683987/keep-size-and-space-between-views-in-uiscrollview-when-zooming[/url]