У меня есть UIScrollView с пейджингом с несколькими подзонами на странице: UIButton, UIwebview и UIImageView. И веб-просмотр, и изображение меняются на каждой странице. Это прекрасно работает. Я использовал Яблоки scrolling image paging example, чтобы начать.Как добавить несколько UIImageViews для подкачки UIScrollView?
Но когда я добавляю второй UIImageView, положение изображения, которое у меня на месте, уже получает новые значения, а новое изображение не отображается.
Это код внутри viewdidload для первого изображения (работает отлично):
// load all the images from our bundle and add them to the scroll view
for (i = 1; i <= kNumImages; i++)
{
NSString *imageName = [NSString stringWithFormat:@"image%d.jpg", i];
UIImage *image2 = [UIImage imageNamed:imageName];
UIImageView *imageView2 = [[UIImageView alloc] initWithImage:image2];
// setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
CGRect rect = imageView2.frame;
rect.size.height = imageviewScrollObjHeight;
rect.size.width = imageviewScrollObjWidth;
// Get the Layer of any view
CALayer * imageLayer = [imageView2 layer];
[imageLayer setMasksToBounds:YES];
[imageLayer setCornerRadius:7.0];
// You can even add a border
[imageLayer setBorderWidth:1.0];
[imageLayer setBorderColor:[[UIColor lightGrayColor] CGColor]];
imageView2.frame = rect;
imageView2.tag = i; // tag our images for later use when we place them in serial fashion
[scrollView1 addSubview:imageView2];
}
[self layoutScrollImages]; // now place the photos in serial layout within the scrollview
Это код макет первого изображения на каждой странице, различные изображения на странице (за пределами viewdidload) (работает отлично):
// layout images for imageview1
- (void)layoutScrollImages
{
UIImageView *imageView = nil;
NSArray *subviews = [scrollView1 subviews];
// reposition all image subviews in a horizontal serial fashion
CGFloat curXLoc = 10;
for (imageView in subviews)
{
if ([imageView isKindOfClass:[UIImageView class]] && imageView.tag > 0)
{
CGRect frame = imageView.frame;
frame.origin = CGPointMake(curXLoc, 50);
imageView.frame = frame;
curXLoc += (kScrollObjWidth);
}
}
// set the content size so it can be scrollable
[scrollView1 setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), [scrollView1 bounds].size.height)];
}
Это код для второго изображения (внутри viewdidload): (когда я удалить [само layoutNavScrollImages], изображение загружает только на первой странице)
for (i = 1; i <= kNumImages; i++)
{
UIImage *navBarImage = [UIImage imageNamed:@"navigationbar.png"];
UIImageView *imageViewNavBar = [[UIImageView alloc] initWithImage:navBarImage];
// setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
CGRect navBarRect = imageViewNavBar.frame;
navBarRect.size.height = 44;
navBarRect.size.width = 320;
navBarRect.origin.x = 0;
navBarRect.origin.y = 0;
/* Get the Layer of any view
CALayer * imageLayer = [imageView3 layer];
[imageLayer setMasksToBounds:YES];
[imageLayer setCornerRadius:7.0];
// You can even add a border
[imageLayer setBorderWidth:1.0];
[imageLayer setBorderColor:[[UIColor lightGrayColor] CGColor]];
*/
imageViewNavBar.frame = navBarRect;
imageViewNavBar.tag = i; // tag our images for later use when we place them in serial fashion
[scrollView1 addSubview:imageViewNavBar];
}
[self layoutNavScrollImages];
И код вне viewdidload: (это переписывает положение первого изображения)
- (void)layoutNavScrollImages
{
UIImageView *view = nil;
NSArray *subviews = [scrollView1 subviews];
// reposition all image subviews in a horizontal serial fashion
CGFloat curXLoc = 0;
for (view in subviews)
{
if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
{
CGRect frame = view.frame;
frame.origin = CGPointMake(curXLoc, 0);
view.frame = frame;
curXLoc += (kScrollObjWidth);
}
}
// set the content size so it can be scrollable
[scrollView1 setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), [scrollView1 bounds].size.height)];
}
Почему вы удаляете [self layoutNavScrollImages] ;? –
Я не удаляю его, просто говоря: когда я его удаляю, изображение правильно загружается на одной странице. Мне нужен способ сделать загрузку изображения на каждой странице и по-прежнему иметь анимацию переключения страниц. – Keaulhaas
Пока не найдено ни одного решения, но обходной путь, который будет работать для этого конкретного проекта, добавив метку вместо изображения с изображением в качестве фона. myLabel.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @ "navigationbar.png"]]; А потом меняется UIImageView к UILabel в layoutNavScrollImages: - (недействительными) layoutNavScrollImages { \t UILabel * вид = ноль; и т.д ... – Keaulhaas