В iOS 4 и более поздних версиях есть способ сделать это, используя метод перехода UIView без необходимости импортировать QuartzCore. Вы можете просто сказать:
[UIView transitionWithView:button
duration:0.4
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
button.hidden = YES;
}
completion:NULL];
Решение Michail будет работать, но на самом деле это не лучший подход.
Проблема с альфа-замиранием что иногда разные перекрывающиеся слои выглядят странно, когда они исчезают. Существуют и другие альтернативы, использующие Core Animation. Сначала включите среду QuartzCore в ваше приложение и добавьте #import <QuartzCore/QuartzCore.h>
в свой заголовок. Теперь вы можете выполнить одно из следующих действий:
1) установить button.layer.shouldRasterize = YES;
, а затем использовать код альфа-анимации, который был предоставлен Михаилом в его ответе. Это предотвратит странное смешение слоев, но имеет небольшое ограничение производительности и может заставить кнопку выглядеть размытой, если она не выровнена точно на границе пикселя.
Альтернативно:
2 ) Используйте следующий код, чтобы анимировать затухание:
CATransition *animation = [CATransition animation];
animation.type = kCATransitionFade;
animation.duration = 0.4;
[button.layer addAnimation:animation forKey:nil];
button.hidden = YES;
Приятная вещь в этом подходе заключается в том, что вы можете перечеркнуть любое свойство кнопки, даже если они не являются анимированными (например, текст или изображение кнопку), просто настройте переход, а затем сразу установите свои свойства.
Если struct device *hwdev
указывает на ваше оборудование struct device
(например, если hwdev
указывает на элемент dev
элемента struct platform_device
), то этот фрагмент кода иллюстрирует, как получить доступ к узлу дерева устройств зарезервированного область памяти и преобразовать это в struct resource
.
struct device_node *memnp;
struct resource mem_res;
int rc;
/* Get pointer to memory region device node from "memory-region" phandle. */
memnp = of_parse_phandle(hwdev->of_node, "memory-region", 0);
if (!memnp) {
dev_err(hwdev, "no memory-region node\n");
rc = -ENXIO;
goto err1;
}
/* Convert memory region to a struct resource */
rc = of_address_to_resource(memnp, 0, &mem_res);
/* finished with memnp */
of_node_put(memnp);
if (rc) {
dev_err(hwdev, "failed to translate memory-region to a resource\n");
goto err1;
}
Начальный адрес заканчивается на mem_res.start
, а длина задается как resource_size(&mem_res);
.