Нет, имя функции не имеет значения (т. Е. Оно не должно совпадать с маршрутом), если у вас не более одной функции с одинаковым именем (тогда вы получите реальную ошибку при запуске сервер)
AssertionError: View function mapping is overwriting an existing endpoint function
, но что именно выполняет функция
blockquote>Это немного сложнее, чем, но в конце дня фляга держит словарь как отображение между «конечной точкой» (именем функции) и объектом функции (именно поэтому имена функций должны быть уникальными):
self.view_functions[endpoint] = view_func
Он также сохраняет
url_map
для сопоставления маршруты к функциям:Map([<Rule '/route_a' (OPTIONS, GET, HEAD) -> func_a>, <Rule '/route_b' (OPTIONS, GET, HEAD) -> func_b>, <Rule '/static/<filename>' (OPTIONS, GET, HEAD) -> static>]) {}
Вот код, который работает ...
- (IBAction) renderScrollViewToImage
{
UIImage* image = nil;
UIGraphicsBeginImageContext(_scrollView.contentSize);
{
CGPoint savedContentOffset = _scrollView.contentOffset;
CGRect savedFrame = _scrollView.frame;
_scrollView.contentOffset = CGPointZero;
_scrollView.frame = CGRectMake(0, 0, _scrollView.contentSize.width, _scrollView.contentSize.height);
[_scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
_scrollView.contentOffset = savedContentOffset;
_scrollView.frame = savedFrame;
}
UIGraphicsEndImageContext();
if (image != nil) {
[UIImagePNGRepresentation(image) writeToFile: @"/tmp/test.png" atomically: YES];
system("open /tmp/test.png");
}
}
Последние несколько строк просто записывают изображение в /tmp/test.png, а затем открывают его в Preview.app. Очевидно, это работает только в Симуляторе: -)
Завершите проект в ScrollViewScreenShot репозитории Github
В iOS 13 я имею, столкнулся с проблемой, что эта строка не будет работать
frame = CGRect(x: 0, y: 0, width: contentSize.width, height: contentSize.height)
для устранения проблемы, я удаляю scrollview из родителя и затем присоединяю в после делания снимка экрана.
Вот версия ответа Stefan Arentz, который работает в iOS 13.
UIImage* image = nil;
UIScrollView *clonedView = (UIScrollView*) [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:_scrollView]];
UIGraphicsBeginImageContextWithOptions(clonedView.contentSize, NO, 0);
{
clonedView.contentOffset = CGPointZero;
clonedView.frame = CGRectMake(0, 0, clonedView.contentSize.width, clonedView.contentSize.height);
[clonedView.layer renderInContext: UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
}
UIGraphicsEndImageContext();
Я не знаю многого, но могу предположить, что если мы установим размер contextRect
следующим образом для ландшафта, это может сработать хорошо:
CGRect contextRect = CGRectMake(0, 0, 1004, 768*2);
Потому что этот contextRect будет определять размер UIGraphicsBeginImageContext
, поэтому я надеюсь, что удвоение высоты может решить вашу проблему