2014-10-08 18 views
5

Làm thế nào để một dịch dòng cuối cùng của mã ObjC sau để Swift:Thiết lập CIFilter trong Swift

CGAffineTransform transform = CGAffineTransformIdentity; 
CIFilter *clampFilter = [CIFilter filterWithName:@"CIAffineClamp"]; 

[clampFilter setValue:[NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)] forKey:@"inputTransform"]; 

Các dòng sau

clampFilter.setValue(transform, forKey: "inputTransform") 

sản xuất

Type 'CGAffineTransform' does not conform to protocol 'AnyObject' 

Trả lời

13

NSValue có một hàm tạo có đối số CGAffineTransform:

let transform = CGAffineTransformIdentity 
let clampFilter = CIFilter(name: "CIAffineClamp") 

let val = NSValue(CGAffineTransform: transform) 
clampFilter.setValue(val, forKey: "inputTransform") 

Cập nhật cho Swift 3:

let transform = CGAffineTransform.identity 
let clampFilter = CIFilter(name: "CIAffineClamp")! 
let val = NSValue(cgAffineTransform: transform) 
clampFilter.setValue(val, forKey: "inputTransform") 
+0

Nó đang gặp sự cố trong Swift 3.1. Bạn có thể gửi bất kỳ ví dụ về CIAffineClamp hoặc CIAffineTile. – ChanWarde

+0

@ChanWarde: Vui lòng kiểm tra xem bản cập nhật có phù hợp với bạn không. –

+0

hello @Martin R, nó không hoạt động ngay cả chỉ "CIKaleidoscope" trong TileEffect đang làm việc cho tôi. Tất cả các bộ lọc khác đều trả về hình ảnh nil. Tôi không tìm thấy bất kỳ ví dụ, câu hỏi hoặc tham chiếu cho nó. Bạn có thể vui lòng thêm một số mã. Hoặc tôi nên thêm một câu hỏi mới cho nó ?? – ChanWarde

1

Điều này có thể làm.

var transform = CGAffineTransformIdentity; 
var clampFilter = CIFilter(name: "CIAffineClamp") 
var value = NSValue(CGAffineTransform: transform) 
clampFilter.setValue(value, forKey: "inputTransform") 
+1

Bạn nên luôn luôn sử dụng 'let' trong nhanh chóng trừ khi bạn đang đặc biệt sẽ thay đổi giá trị trong tương lai. – Fogmeister

Các vấn đề liên quan