Как добавить несколько фильтров (Caman.js)?

Подход Гийома, использующий HTML, не работает для меня (по крайней мере, в iOS 7.1 beta 5).

Чистое решение заключается в том, чтобы вставить NSAttributedStrings в виде RTF (плюс резервное копирование с открытым текстом) в палитру:

- (void)setAttributedString:(NSAttributedString *)attributedString {
    NSData *rtf = [attributedString dataFromRange:NSMakeRange(0, attributedString.length)
                               documentAttributes:@{NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType}
                                            error:nil];
    self.items = @[@{(id)kUTTypeRTF: [[NSString alloc] initWithData:rtf encoding:NSUTF8StringEncoding],
                     (id)kUTTypeUTF8PlainText: attributedString.string}];
}

Swift 2.3

public extension UIPasteboard {
  public func set(attributedString: NSAttributedString?) {

    guard let attributedString = attributedString else {
      return
    }

    do {
      let rtf = try attributedString.dataFromRange(NSMakeRange(0, attributedString.length), documentAttributes: [NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType])
      items = [[kUTTypeRTF as String: NSString(data: rtf, encoding: NSUTF8StringEncoding)!, kUTTypeUTF8PlainText as String: attributedString.string]]

    } catch {

    }
  }
}

Swift 3

import MobileCoreServices
public extension UIPasteboard {
  public func set(attributedString: NSAttributedString?) {

    guard let attributedString = attributedString else {
      return
    }

    do {
      let rtf = try attributedString.data(from: NSMakeRange(0, attributedString.length), documentAttributes: [NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType])
      items = [[kUTTypeRTF as String: NSString(data: rtf, encoding: String.Encoding.utf8.rawValue)!, kUTTypeUTF8PlainText as String: attributedString.string]]

    } catch {

    }
  }
}
0
задан Loizos Vasileiou 24 January 2019 в 12:50
поделиться

1 ответ

Этот учебник помог мне найти решение.

Решение:

  • Сначала добавьте выбранные фильтры в список массивов:

    myFiltersList = [ "vintage", "filter331" ];
    
  • Для каждого элемента вы должны создать Caman Работайте и проверяйте, содержится ли каждый фильтр списка (текстовое значение) в библиотеке Caman.js (имя функции). Я использовал:

    if( array[i]   in this) statement
    
  • Это проверило бы текстовое значение фильтра, если бы он содержал в этом , что в данном случае Caman.js. Будьте осторожны, что . Это вы должны использовать, чтобы сделать эту работу.

    if(filtersList[i] in this) //in this  = in Caman.js
    
  • После проверки, существует ли фильтр, фильтр должен быть подготовлен сначала в определенном синтаксическом порядке:

    this[ filtersList[i] ] (); //or this["vintage"](); or this.vintage();
    
  • Дон забудь сделать ():

    this.render();
    

Полный пример:

//For each filter in the list
myFiltersList.forEach( function() {

    //Open Caman Function and Reference the 2D canvas
    Caman('#myCanvas', function () {

        //Check if the current filter is declared within the library Caman.js
        if(myFiltersList[i] in this){

            alert("filter in the list");

            //Add filter from this as filter in Caman function/
            this[myFiltersList[i]]().render();

            i++; //Increase counter
        }else{
            alert("filter not in the list");
        }
    });
});

Результаты:

[ 1127] Корпус "винтаж":

alert("filter in the list");
this[myFiltersList[i]]().render();
i++;

Корпус "filter331":

alert("filter not in the list");
0
ответ дан Loizos Vasileiou 24 January 2019 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: