Это лучшее, что я думаю, вы можете сделать, чтобы уменьшить дублирование кода:
private static void DrawRectangles<T>(this Image thisImage, List<T> rectangles, Color color, Action<Graphics, Brush, T[]> fill)
{
using (var g = Graphics.FromImage(thisImage))
{
var brush = new SolidBrush(color);
fill(g, brush, rectangles.ToArray());
}
}
public static void DrawRectangles(this Image thisImage, List<RectangleF> rectangles, Color color)
{
thisImage.DrawRectangles(rectangles, color, (g, b, rs) => g.FillRectangles(b, rs));
}
public static void DrawRectangles(this Image thisImage, List<Rectangle> rectangles, Color color)
{
thisImage.DrawRectangles(rectangles, color, (g, b, rs) => g.FillRectangles(b, rs));
}
НАКОНЕЦ !!!!!!
Мне пришлось инициализировать все представления с помощью initWithFrame и передать в допустимом кадре прямоугольники. Init должен использоваться с контроллерами и initWithFrame, передавая rects для UIViews !!!!
characterView = [ [ CharacterView alloc ] initWithFrame:CGRectMake(0, 0, 480, 320)];
then
characterMale = [ [ CharacterMale alloc ] initWithFrame:frame];
Принимает ли новое представление взаимодействие с пользователем? Другими словами, включена ли userInteractionEnabled в представлении «Символы»?
Еще одна вещь, которую следует учитывать, это то, что UIButton
подвиды, которые были добавлены в UIImageView
] вообще не работают. Вам нужно создать UIView
, в который вы добавляете как представление изображения, так и кнопки.
Вероятно, это связано с тем, что взаимодействие при просмотре изображений по умолчанию отключено, но я не проверял это.
У меня была аналогичная проблема, когда я пытался добавить кнопку во время инициализации UIView с фреймом CGRectZero:
@implementation SomeView
...
- (id)initWithTitleImage:(UIImage *) newTitleImage {
// BROKEN: frame with CGRectZero.
self = [super initWithFrame:CGRectZero];
if (self) {
UIButton *someButton = ...;
[self addSubview someButton];
}
}
Как только я изменил фрейм на правильный прямоугольник, кнопка сработала:
@implementation SomeView
...
- (id)initWithTitleImage:(UIImage *) newTitleImage {
// WORKING: frame with proper CGRect.
self = [super initWithFrame:CGRectMake(0, 0, 480, 320)];
if (self) {
UIButton *someButton = ...;
[self addSubview someButton];
}
}