Ответ от WrightsCS перестал работать в какой-то момент из-за изменения в iOS.К сожалению, это то, с чем вам придется жить, если вы хотите использовать недокументированные функции.
Если вам все еще нужно это сделать, только для приложений, не входящих в App Store этот код работает в iOS 9.3.Однако он может перестать работать в любом будущем выпуске iOS. (см. Комментарий ниже: больше не работает в iOS 10)
#import "SBSUIWallpaperPreviewViewController.h"
#import <dlfcn.h>
// open the private framework dynamically
void *handle = dlopen("/System/Library/PrivateFrameworks/SpringBoardUIServices.framework/SpringBoardUIServices", RTLD_NOW);
UIImage *wallpaper = [UIImage imageNamed: @"background.jpg"];
Class sbClass = NSClassFromString(@"SBSUIWallpaperPreviewViewController");
// we create a view controller, but don't display it.
// just use it to load image and set wallpaper
SBSUIWallpaperPreviewViewController *controller = (SBSUIWallpaperPreviewViewController*)[[sbClass alloc] initWithImage: wallpaper];
[controller setWallpaperForLocations: 3]; // 3 -> set both for lock screen and home screen
dlclose(handle);
Вам потребуется добавить частный заголовок API в ваш проект.Обычно их можно найти в Интернете с небольшим поиском, например, , здесь .
. В приведенном выше примере вызывается [SBSUIWallpaperPreviewViewController setWallpaperForLocations:]
с аргументом 3: 3, указывающим, что изображение должно бытьиспользуется для и блокировки, и домашних экранов.1 указывает только на экран блокировки.2 обозначает только главный экран.
Объяснение того, почему я открываю этот фреймворк динамически , см. мой соответствующий ответ здесь .
У меня нет ответа относительно мелодий .Это действительно должен быть отдельный вопрос: совершенно разные API на работе.