#iphone #ios #uiview #uiwebview #calayer
#iPhone #iOS #uiview #uiwebview #calayer
Вопрос:
Я пытаюсь обнаружить анимацию и другие обновления экрана по мере того, как они происходят внутри UIWebView. Я хотел бы получить прямоугольники областей в UIWebView, которые были изменены с момента последнего обновления.
Я думаю, что на самом деле то, что я ищу, — это способ «перехватить» вызовы, которые UIWebView выполняет для setNeedsDisplayInRect. Есть ли способ сделать это? Могу ли я каким-то образом подклассировать базовый объект CALayer UIWebView таким образом, чтобы это позволило мне перехватывать эти вызовы по мере их поступления из UIWebView?
Комментарии:
1. Просто обновление: я попытался использовать категорию Objective C (@implementation CALayer (MyCALayer)) для отслеживания вызовов, идущих из UIWebView в его CALayer. Я получаю вызовы, включая setNeedsDisplayInRect, но, похоже, нет способа обработать вызовы и затем передать их исходному объекту CALayer. Что я упускаю из виду? Наверняка есть способ сделать это?
2. Я также хотел бы знать, возможно ли это!
3. Мне действительно нужен ответ на этот вопрос.
Ответ №1:
Хорошего способа сделать это нет. Вы можете попробовать сделать снимок CALayer UIWebView и сравнить его с предыдущим снимком, но у меня было много проблем с получением надежных снимков UIWebViews.
Ответ №2:
Используйте категорию Objective-C (@implementation CALayer (MyCALayer)) — как вы уже делаете на основе вашего обновления — для отслеживания вызовов, идущих из UIWebView в CALayer.
Затем используйте метод Swizzling, чтобы передать переопределения вашей категории исходному объекту CALayer.
Комментарии:
1. Проблема в том, что вы делаете это для каждого CALayer. Слой UIWebView может быть переопределен с помощью
(Class)layerClass
. Но фактически изменяемый слой находится внутри частного подвида.