Странное сглаживание в пользовательском представлении

Иногда, чтобы заполнить пустую базу данных от внешнего источника данных или отладить проблему в базе данных я должен отключить ВСЕ триггеры и ограничения. Чтобы сделать так, я использую следующий код:

Для отключения всех ограничений и триггеров:

sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
sp_msforeachtable "ALTER TABLE ? DISABLE TRIGGER  all"

Для включения всех ограничений и триггеров:

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? ENABLE TRIGGER  all"

я нашел, что решение некоторое время назад на SQLServerCentral, но должен был изменить разрешать ограничительную часть, поскольку исходный не работал полностью

5
задан mrueg 21 September 2009 в 14:58
поделиться

2 ответа

Поскольку обводка растягивается на одинаковую величину в обе стороны, линия шириной в один пиксель не должна размещаться по целочисленной координате, а со смещением 0,5 пикселя.

Вычислите правильные координаты для обведенных линий следующим образом:

CGPoint pos = CGPointMake(floorf(pos.x) + 0.5f, floorf(pos.y) + 0.5f);

BTW: Не приводите свои значения к int и обратно к float, чтобы избавиться от десятичной части. В языке C для этого есть функция floor .

10
ответ дан 13 December 2019 в 22:11
поделиться

в ваших фреймах просмотра у вас, вероятно, есть значения с плавающей запятой, которые не являются целыми числами. Хотя кадры достаточно точны, чтобы отображать доли пикселя (с плавающей точкой), вы получите размытость, если не приведете к int

CGRect frame = CGRectMake((int)self.frame.bounds..., (int)...., (int)...., (int)....);
0
ответ дан 13 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: