Штабелирование просмотров ... требуется проверка кода - PullRequest
0 голосов
/ 15 ноября 2011

Проблема:

  1. Поверх существующего UIView загрузите фоновое изображение
  2. Из изображения колоды карт (большое изображение) вырежьте 1 карту (часть большого изображения) и
  3. Поместите эту карту поверх фонового изображения

Следующий код работает. Он делает именно то, что мне нужно, чтобы сделать. Я спрашиваю вас, хотя ..

  1. Я правильно делаю? Это так, как это сделано?
  2. Все ли шаги, которые я использовал, действительно необходимы? У меня есть сильное подозрение, я сделал это более сложным, чем это должно быть

Спасибо за ваше время

// Define overall UIView area and create a view
UIView *background = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];

// Gain access to background image
UIImage *backgroundImage = [UIImage imageNamed:@"green_background.jpg"]; 

// Put background image on top of a 
UIImageView *myImageView = [[UIImageView alloc] initWithImage:backgroundImage];

// So now we have the view of some size with some image bahind it
[background addSubview:myImageView];    


// #####################################################################

CGRect positionOnParentView = CGRectMake(40, 40, 50, 130);

CGImageRef bigImage = [UIImage imageNamed:@"cards.png"].CGImage;    
CGImageRef partOfABigImage = CGImageCreateWithImageInRect(bigImage, CGRectMake(0, 0, 200, 50));

// get an image to be displayed
UIImage *partOfImage = [UIImage imageWithCGImage:partOfABigImage];

// Put it on it's onw view
UIImageView *cardImage = [[UIImageView alloc] initWithImage:partOfImage];

// create a UIview and add image 
UIView *card = [[UIView alloc] initWithFrame:positionOnParentView];
[card addSubview:cardImage];

[background addSubview:card];

[[self view] addSubview:background];

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Вы создаете эту иерархию представлений:

UIView (self.view)
  UIView (background)
    UIImageView (backgroundImage - backgroundImage)
    UIView (card)
      UIImageView (cardImage - partOfABigImage)

A UIImageView может иметь подпредставления. Так вам нужны все эти промежуточные взгляды? Будет ли этой простой иерархии достаточно?

UIImageView (self.view - backgroundImage)
  UIImageView (cardImage - partOfABigImage)
1 голос
/ 15 ноября 2011

Пара вещей:

  1. Возможно, вы просто не включили свои заявления о выпуске, но убедитесь, что вы выпускаете элементы, которые вы называете alloc. Вы также можете автоматически выпустить их. Например,

    UIView * background = [[[UIView alloc] initWithFrame: CGRectMake (0, 0, 320, 460)] autorelease];

  2. Да, вы все делаете правильно, единственный способ действительно уменьшить количество кода, который у вас есть, - это дать каждой карточке свое собственное изображение, чтобы вам не пришлось обрезать большое изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...