2016-04-01 27 views
1

'da CGImageCreateWithImageInRect ile dokunulama konumu kırpılamıyor Arka plan resminin bir bölümünü dokunmatik konuma kopyalamaya çalışıyorum, ardından kırpılan kısımla aynı noktaya bir alt görünüm ekliyorum. Eğer bunu doğru bir şekilde yapıyor olsaydım, her iki resim de sıraya girerdi ve iki UIImageViews'ın orada olduğunu söyleyemezdiniz, ancak aşağıdaki resimlere benziyor. Neden bu sıraya girmiyor ve neden yeni görüntü biraz yakınlaştırılıyor?Hızlı bir şekilde

Güncelleme: ImageView, ana görünümle aynı boyuttadır ve görüntü modu görünüm uydurmadır, bu nedenle resmin üstündeki ve altındaki görseller hala resim görünümünün bir parçasıdır.

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    let touch = touches.first!.locationInView(view) 
    let rect = CGRect(origin: touch, size: CGSize(width: 90, height: 90)) 

    let imageRef = CGImageCreateWithImageInRect(mainImageView.image!.CGImage, rect) 

    if imageRef != nil { 
     let newImage = UIImage(CGImage: imageRef!) 

       let bgImage = UIImageView(image: newImage) 
       bgImage.center = touch 
       self.view.addSubview(bgImage) 
       self.view.bringSubviewToFront(bgImage) 
      } 
} 

Dokunma önce:

Before Touch

Dokunuşlar sonra: After Touches

+0

Yo UIImageView-GeometryConversion sınıfını doğru temas noktası elde etmek için kullanabilirsiniz .. burada link https://github.com/nubbel/UIImageView-GeometryConversion –

+0

Cevabınız için teşekkürler. Hızlı bir şekilde bir örnek bulabileceğimi biliyor musunuz, çünkü hala neyi yanlış yaptığımı tam olarak emin değilim. –

+0

Denedim: let convertedPoint = self.mainImageView.convertPoint (buna dokunun, toView: self.mainImageView) let rect = CGRect (kökeni: convertedPoint, boyut: CGSize (genişlik: 90, yükseklik: 90)) –

cevap

0

Sonunda bunu anladım:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    let touch = touches.first!.locationInView(view) 

    UIGraphicsBeginImageContext(mainImageView.bounds.size) 
    UIApplication.sharedApplication().keyWindow!.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
    let screenshot = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    let crop = CGRectMake(touch.x - 45, touch.y - 45, 90, 90) 
    let imageRef = CGImageCreateWithImageInRect(screenshot.CGImage, crop) 

    if imageRef != nil { 
     let newImage: UIImage = UIImage(CGImage: imageRef!, scale: mainImageView.image!.scale, orientation: mainImageView.image!.imageOrientation) 

       let bgImage = UIImageView(image: newImage) 
       bgImage.center = touch 
       self.view.addSubview(bgImage) 
       self.view.bringSubviewToFront(bgImage) 
      } 
     } 
    } 

} 
İlgili konular