Обрезка/масштабирование не работает при установке обоев iOS с использованием частной среды PhotoLibrary

Мне удалось (с помощью этого сообщения) открыть создать PLStaticWallpaperImageViewController из частной среды PhotoLibrary, которая позволяет напрямую устанавливать обои и экран блокировки (используя тот же пользовательский интерфейс, что и приложение «Фотографии»). К сожалению, функции обрезки/масштабирования изображения, похоже, не работают, так как прикосновения к самому просмотру изображения, кажется, не проходят (основной вид также не закрывается должным образом после нажатия кнопок отмены/установки, но это не так важно).

У меня есть проект Xcode, демонстрирующий настройку обоев (можно запустить как в симуляторе, так и на устройстве без взлома):

https://github.com/newenglander/WallpaperTest/

Код довольно прост и включает в себя ViewController, наследующий от PLStaticWallpaperImageViewController и реализующий метод инициализации, подобный следующему:

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [self initWithUIImage:[UIImage imageWithContentsOfFile:@"/System/Library/WidgetResources /ibutton/[email protected]"]];
    self.allowsEditing = YES;
    self.saveWallpaperData = YES;
    return self;
}

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

Возможно, кто-то понимает, почему обрезка/масштабирование не работает, или может дать мне альтернативный способ установки обоев в приложении (конечно, предназначенном для Cydia, а не для App Store)?


person newenglander    schedule 11.07.2014    source источник


Ответы (1)


Используйте этот пример проекта, работает очень хорошо.

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

https://github.com/yuvirajsinh/YCameraView

//---------- Ответ улучшен----------//

Я смотрю на ваш проект и вижу 2 проблемы:

здесь у вас есть 3 предупреждения о семантической проблеме:

- (id)initWithUIImage:(id)arg1 cropRect:(struct CGRect { struct CGPoint { float x_1_1_1; float x_1_1_2; } x1; struct CGSize { float xViewController.m1_1; float xViewController.m1_2; } x2; })arg2;

введите здесь описание изображения

в вашем ViewController.m вы устанавливаете, чтобы получить изображение, откуда?

        - (id)initWithCoder:(NSCoder *)aDecoder
    {
        // black_i

//what directory is this?
        self = [self initWithUIImage:[UIImage imageWithContentsOfFile:@"/System/Library/WidgetResources/ibutton/[email protected]"]];
//--------------------
        self.allowsEditing = YES;
        self.saveWallpaperData = YES;

        return self;
    }

я пытаюсь удалить твой

- (id)initWithUIImage:(id)arg1 cropRect:(struct CGRect { struct CGPoint { float x_1_1_1; float x_1_1_2; } x1; struct CGSize { float x_2_1_1; float x_2_1_2; } x2; })arg2;

измените каталог IMG на:

self = [self initWithUIImage:[UIImage imageNamed:@"myImage.png"]];

и все работает хорошо, но не может обрезать изображение, с моим git хабом YCameraView вы должны сначала понять, как это работает. Функция ОБРЕЗАНИЯ, если вы хотите использовать кадрирование или более простое, вам нужно создать полноэкранный UICameraPicker разрешить пользователю получать с камеры или из библиотеку и разрешите редактирование в cameraPicker, тогда вы можете загрузить новое изображение в свой вид, как это

self = [self initWithUIImage:[UIImage imageNamed:imageSelected.image]];

для просмотра отклонения вы не можете, потому что это полное приложение позволяет пользователю устанавливать фоновые обои, и вы не можете закрыть приложение, чтобы увидеть SpringBoard, вам нужно создать первое представление> средство выбора> подробное представление с настройками для дома и LockScreen> затем закройте и вернитесь к первому виду.

PS: я думаю, что в вашем проекте, чтобы разрешить редактирование непосредственно в представлении, вы должны улучшить свой код с помощью жеста сжатия и панорамирования в UIView

Надеюсь, это поможет вам!

person BlackSheep    schedule 20.07.2014
comment
Спасибо, в той библиотеке я пока не могу кадрировать, хотя масштабирование работает. Но я не вижу, как это помогает напрямую с моим вопросом. Вы пробовали мой образец проекта? - person newenglander; 21.07.2014
comment
@newenglander Я улучшил свой ответ, чтобы помочь решить вашу проблему - person BlackSheep; 21.07.2014
comment
Спасибо. Я обновил проект, чтобы учесть несколько ваших моментов. Но поскольку я использую частную структуру от Apple, которая используется самим приложением «Фотографии», я не хочу выполнять масштабирование и обрезку самостоятельно, это должен делать класс (PLStaticWallpaperImageViewController), который я использую. - person newenglander; 21.07.2014
comment
Еще раз спасибо за ответ, хотя он не совсем ответил на мой вопрос (и поэтому я сохранил награду до конца, на случай, если кто-то еще придет с решением), это хороший частичный обходной путь, который я могу комбинировать с другими исправления для работы основных функций. - person newenglander; 30.07.2014