分配文本时UITextView不滚动

时间:2015-08-17 19:16:15

标签: ios swift

我正在创建一个具有UIImageView和UITextView的应用程序。我从服务器获取文本和图像,但是当我向UITextView分配大量文本时,UITextView不会滚动。很少有人开始使用大量文本滚动。我不确定我做错了什么?但大多数时候它不会滚动并且看起来很冷冻。我检查了输出窗口,我没有看到任何约束被破坏。

func locationManager(manager: CLLocationManager!, didRangeBeacons beacons: [AnyObject]!, inRegion region: CLBeaconRegion!) {

    if beacons.count == 0 {
        return
    }

    for beacon in beacons as! [CLBeacon] {

       // we are only interested in beacons that are near or immediate!
        if beacon.proximity == .Near || beacon.proximity == .Immediate {

        let closestTourBeacon = beaconByMajorAndMinorId(beacon.major, minorId: beacon.minor)

        if self.lastBeacon == nil {
            self.lastBeacon = closestTourBeacon
        }
        else if isEqualToLastBeacon(closestTourBeacon)
        {
            continue
        }
        else {
            self.lastBeacon = closestTourBeacon
        }

            dispatch_async(dispatch_get_main_queue(), { () -> Void in

                // vibrate the phone
                //AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))

                println("Assinging the text property")

                self.textTextView.text = closestTourBeacon.text <<=== THIS LINE
                self.title = closestTourBeacon.title
                self.photoImageView.load(closestTourBeacon.imageURL!)

                let originalFrame = self.photoImageView.frame
                self.photoImageView.center = CGPointMake(self.photoImageView.center.x, -100)

                UIView.animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1.0, options: UIViewAnimationOptions.TransitionNone, animations: { () -> Void in

                    self.photoImageView.frame = originalFrame

                    }, completion: { (finished :Bool) -> Void in

                })
        })

        }

    }

}

更新:我还注意到,当应用首次启动UITextView时,即使有大量要滚动的文本,UITextView也会完全冻结。之后,如果我继续尝试滚动UITextView并使用新数据获取和setText,它将从冻结状态开始并开始滚动而没有任何问题。

2 个答案:

答案 0 :(得分:1)

如果冻结将其从主队列中取出。

dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);

    dispatch_async(myQueue, ^{
        //update text
    });
    //Release queue
    dispatch_release(myQueue);

同时查看https://www.youtube.com/watch?v=GvsEhDEGO_k我认为您的问题可能是更新太快

答案 1 :(得分:0)

感谢所有回复!虽然我没有找到它为什么会发生,但我能够找到一个解决方案。我现在强制它在分配文本后滚动。

 self.textTextView.text = closestTourBeacon.text
                    // scroll to get out of the frozen mode 

                    self.textTextView.scrollRangeToVisible(NSMakeRange(1, 1))