Дублирование или отбрасывание пикселей не являются лучшим изменением размеров метода или изображения, поскольку результаты покажут растрирование и зубчатость. Для лучших результатов Вы должны передискретизировать изображение, которое даст получающемуся изображению намного более гладкий взгляд. Существует много методов для передискретизации, как билинейный, bicubic, lanczos и т.д.
Смотрят на функция BicubicResample от wxWidgets. Это работает, будет все виды изображений, не только шкала полутонов, но и необходимо быть в состоянии адаптировать его к потребностям. Тогда там также передискретизирует код от VirtualDub. Google Codesearch может показать более связанный код.
РЕДАКТИРОВАНИЕ: связи выглядят хорошо в предварительном просмотре, но разорваны, когда отправлено. Это странно. Перейдите к Google codesearch и запросу для "wxwidgets resamplebicubic", и "virtualdub передискретизируют" соответственно для получения тех же результатов.
Вы на правильном пути. В вашем QuizController xib вы можете создавать отдельные представления, перетаскивая их в главное окно xib, а не в главное представление QuizController. Затем вы можете создать каждое необходимое представление в соответствии с типами ваших вопросов. Когда пользователь нажимает следующий или предыдущий, удалите предыдущее представление и загрузите необходимое представление на основе вашего типа вопроса, используя -addSubview в главном представлении контроллера представления, и отслеживайте, какое из вложенных представлений отображается в данный момент. Попробуйте что-то вроде этого:
[currentView removeFromSuperView];
switch(questionType)
{
case kMultipleChoice:
[[self view] addSubview:multipleChoiceView];
currentView = multipleChoiceView;
break;
case kOpenEnded:
[[self view] addSubview:openEndedView];
currentView = openEndedView;
break;
// etc.
}
Где представление multipleChoice и openEndedView - это выходы UIView в вашем QuizController, подключенные к представлениям, которые вы создали в IB. Возможно, вам придется изменить положение вашего представления в родительском представлении, прежде чем добавлять его, чтобы он отображался в нужном месте,
Да, IB на iPhone действительно хочет, чтобы владелец файла был подклассом UIViewController, что делает то, что вы хотите, немного сложным. Что вы можете сделать, так это загрузить перо в существующий UIViewController вместо того, чтобы создавать его с помощью пера:
@implementation QuizController
- (void) loadCustomViewFromNib:(NSString *)viewNibName {
(void)[[NSBundle mainBundle] loadNibNamed:viewNibName owner:self options:nil];
}
@end
Это заставит среду выполнения загружать перо, но вместо того, чтобы создавать новый контроллер представления для подключения действий и выходов, которые он будет использовать что вы передаете как владелец. Поскольку мы передаем self в представлении, определенном в этом пере, он будет прикреплен к любому IBOutlet, которому он назначен после вызова.